【问题标题】:python pandas filter and aggregate multiple columns and write into CSVpython pandas过滤和聚合多列并写入CSV
【发布时间】:2017-07-03 22:52:43
【问题描述】:

我想读取一个 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

我是 pandas 的新手,到目前为止,通过阅读这里的各种问题,我似乎需要使用 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)

我想获取每个日期的 True Flags 计数,以创建具有以下结果的新 csv 文件 - 日期、总计数、flag1 真实计数、flag2 真实计数、flag3 真实计数

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

【问题讨论】:

  • df.groupby('date').sum().astype(int).assign(count=df.groupby('date').count().flag1).to_csv('output.csv').

标签: python pandas pandas-groupby


【解决方案1】:

您需要按日期对行进行分组,并对标志进行计数和求和:

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

【讨论】:

  • Thx 会尽快试用并通知您
【解决方案2】:

groupby() 并创建了新的计数字段 reset_index 作为“计数”,然后在 seconf df groupby 中为所有 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)

【讨论】:

  • 谢谢!这个答案似乎也有效......只需要删除额外的索引值和重复的日期列
  • 刚刚投票赞成 ammy -:) ,将另一个答案标记为正确,因为它也有效并且首先出现 -:) 如果你确实有机会让我知道如何删除多余的列和指数...thnaks agian !
  • 嘿@Naresh MG 我已经对上述答案进行了更改。最后两行更新。而不是concat 使用mergeto_csv index=False
  • 太棒了!愚蠢的我,在我应该修复它之前我已经使用了合并...-;) 我正在尝试 index=False 与联系人...
猜你喜欢
  • 2017-07-03
  • 2019-10-12
  • 2021-11-01
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 2018-06-11
  • 2021-08-24
  • 1970-01-01
相关资源
最近更新 更多