在另一列满足条件后计算一列中的值
Posted
技术标签:
【中文标题】在另一列满足条件后计算一列中的值【英文标题】:Counting the values in one column after another column fulfills a criteria 【发布时间】:2018-09-17 03:08:31 【问题描述】:所以我有一个包含日期列和积极情绪列的 CSV 文件。如果正面情绪列是正面的,则该列将显示 1。否则,它将显示 0。
我需要能够输入一个日期,对于 csv 中的日期晚于输入日期的行,我需要从正面情绪列中计算总正面分数。
到目前为止,我已经设法想出了这个
import datetime
import pandas as pd
data = pd.read_csv('rt_Article2.csv')
csv_date = pd.to_datetime(data["Date"])
positive_news= (data['Positive'])
user_date= datetime.datetime(2018, 4, 1, 00, 00)
user_score = 4
neg= 0
pos= 0
count=0
for i in csv_date:
if i > user_date:
count +=1
for N in positive_news:
if N == 1:
pos +=1
break
print (pos)
但是,当我 print(pos) 时,它只计算正列中的所有内容,无论它是否满足日期条件。
我一个月前才开始编码,如果代码混乱,我很抱歉。 任何帮助将不胜感激。谢谢!
Date Positive
April 2, 2018 0
April 1, 2018 1
April 1, 2018 0
March 31, 2018 0
更新:一旦达到 user_score(在本例中为 4),我还必须返回第一个正分数和最后一个正分数的日期。换句话说,我需要获取分数为 1 的日期,以及分数达到4的日期。
【问题讨论】:
您有一些示例数据要分享吗? 你也可以发布CSV
文件的样本吗?
【参考方案1】:
我认为你不需要循环,使用熊猫,循环几乎总是不必要的:
import pandas as pd
import numpy as np
np.random.seed(123)
df = pd.DataFrame('date':np.random.choice(pd.date_range('2017-09-01','2017-09-30'),500),'positive':np.random.choice([0,1],500))
df.loc[df['date'] == '2017-09-15','positive'].sum()
输出:
13
【讨论】:
如果我必须返回第一个正分的日期和最后一个正分的日期,一旦达到 user_score(在本例中为 4),此方法是否有效。换句话说,我需要得到分数为 1 的日期,以及分数达到 4 的日期。以上是关于在另一列满足条件后计算一列中的值的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server:对列的每个组值求和(或差),直到在另一列上满足条件
使用 dplyr [重复] 有条件地将一列中的值替换为另一列中的值