2017-07-03 84 views
1

我想读一个CSV文件,并依靠多列/总蟒蛇大熊猫过滤和聚集多列,并写入到CSV

我的输入数据如下

unique_identifier,date,flag1,flag2,flag3 
a1,7/1/2017,FALSE,TRUE,FALSE 
a2,7/1/2017,FALSE,TRUE,FALSE 
a3,7/1/2017,FALSE,TRUE,FALSE 
a4,7/1/2017,TRUE,FALSE,FALSE 
a5,7/1/2017,FALSE,FALSE,FALSE 
a6,7/2/2017,FALSE,FALSE,TRUE 
a7,7/2/2017,FALSE,FALSE,TRUE 
a8,7/2/2017,FALSE,TRUE,FALSE 
q9,7/2/2017,FALSE,TRUE,TRUE 

是新来的熊猫和到目前为止通过阅读各种问题看起来像我需要使用一个或多个set_index(),.append(),.join(),.agg()

我有单独的结果,但不能得到新的我想要的结果。

import pandas as pd 

df = pd.read_csv("flagdata.csv") 

print (df["date"].value_counts()) 


df_flag1 = df[df.flag1 == True] 
df_flag1 = df_flag1["date"].value_counts() 
print (df_flag1) 

df_flag2 = df[df.flag2 == True] 
df_flag2 = df_flag2["date"].value_counts() 
print (df_flag2) 


df_flag3 = df[df.flag3 == True] 
df_flag3 = df_flag3["date"].value_counts() 
print (df_flag3) 

我想要得到真正的标志计数每个日期创建结果如下新的CSV文件 - 迄今为止,总计数,FLAG1真实计数,FLAG2真实计数,FLAG3真实计数

date,count,flag1,flag2,flag3 
7/1/2017,5,1,3,0 
7/2/2017,4,0,2,3 
+0

'df.groupby( '日期')的。总和()。astype(INT).assign(计数= df.groupby( '日期')。COUNT()。FLAG1).to_csv ( 'output.csv')'。 – Abdou

回答

2

你需要按日期排和计数,总结标志:

result = pd.concat([df.groupby('date').count()['flag1'], 
        df.groupby('date').sum()], 
        axis=1).astype(int) 
result.columns = ['count'] + result.columns[1:].tolist() 
#   count flag1 flag2 flag3 
#date         
#7/1/2017  5  1  3  0 
#7/2/2017  4  0  2  3 

result.to_csv('output.csv') 
+0

Thx会尽快试用此产品并让您知道 –

1

groupby()和seconf DF groupby创造了新的计数字段reset_index为“计数”,那么对sum所有True

df1= df.groupby("date")["date"].count().reset_index(name="count") 
df2= df.groupby("date").sum().astype(int).reset_index() 
df3 = pd.merge(df1,df2, on="date") 
df3.to_csv("output.csv",index=False) 
+0

谢谢!这个答案也似乎工作...只需要删除额外的索引值和重复日期列 –

+0

如果我的答案是有用的不要忘记标记。 – ammy

+0

只是upvoted ammy - :),标记了其他答案是正确的,因为它的工作原理也在那里 - 如果你有机会,让我知道该怎么做才能删除额外的列和索引... thnaks安吉安! –