在另一列满足条件后计算一列中的值

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 [重复] 有条件地将一列中的值替换为另一列中的值

R中是不是有一种方法,如果一列的值满足另一列中的某个标准,则该列的值应该是上面的值

如果满足条件,熊猫将值从一列复制到另一列

Groupby 一列并计算另一列的条件?