2017-07-03 83 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安吉安! –