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

时间:2018-04-07 04:17:05

标签: python pandas csv for-loop

所以我有一个带有日期列和正面情绪列的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)

然而,当我打印(pos)时,它只计算正列中的所有内容,无论它是否符合日期标准。

我刚刚开始编码一个月前,如果代码混乱,我很抱歉。 任何帮助将不胜感激。谢谢!

Date                Positive
April 2, 2018       0
April 1, 2018       1
April 1, 2018       0
March 31, 2018      0

更新:我还必须返回第一个正分和最后一个正分的日期,一旦达到user_score,在这种情况下为4.换句话说,我需要得到分数为1的日期,以及分数达到4的日期。

1 个答案:

答案 0 :(得分:1)

我认为你不需要循环,大熊猫,循环几乎总是不必要的:

#include<stdio.h>
int main()
{
int i,j,arr[100000],n,d;
scanf("%d\t%d",&n,&d);
for(i=0;i<n;i++)
    scanf("%d",&arr[i]);
for(i=0;i<d;i++)
{ 
    int first=arr[0];
    for(j=0;j<n;j++)
    {
        arr[j]=arr[j+1];
    }
    arr[n-1]=first;
}
for(i=0;i<n;i++)
{
    printf("%d\t",arr[i]);
}
    return 0;
}

输出:

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()