如何合并来自多个不同数据框上的“ groupby”操作的结果

时间:2019-05-01 13:51:46

标签: python-3.x pandas dataframe dask

我阅读了一系列的csv文件。每个都包含不同用户的交易数据的历史记录。我想按工作日汇总整个组的交易金额。为每个用户进行摘要很容易,但是在汇总结果时遇到了问题

对于每个用户,数据看起来像这样:

id  data_import_id  posted  amount
00000000  3c221ff  2014-01-02T19:00:00.000-05:00  3656506
00000013  3c221ff  2014-01-02T19:00:00.000-05:00  3656506
00000015  3c221ff  2014-01-04T19:00:00.000-05:00  3656506
0000000a  3c221ff  2014-01-05T19:00:00.000-05:00  3656506
00000001  3c221ff  2014-01-06T19:00:00.000-05:00  3656506

我阅读了.csv文件,并为每个用户建立了一个数据框列表。然后,我处理数据框以首先按工作日获取金额摘要,然后尝试汇总所有用户的结果。

两个用户的累积数据框列表如下所示:

[           amount
weekday          
Monday      43118
Wednesday  5872780,             amount
weekday           
Friday        1249
Monday     2566648
Wednesday    12000]

从该列表中,我想生成一个只有两列的单个数据框:“工作日”和“金额”,其中“金额”是所有用户一天的总计。

我在下面使用的代码给出了“ ValueError:无法将列数量转换为类型'int'的类型”。我也尝试过使用'append'和'join',但由于数据框的大小不尽相同,因此无法使其正常工作。 TIA提供任何帮助/指导。

def assess(df):
    # Create list to hold results
    cumulative = []
    for frame in df:
        # Produce a Dataframe that summarizes a users weekday totals
        total_amounts = frame.groupby(["weekday"])[["amount"]].sum()
        cumulative.append(total_amounts)
        print(cumulative)
        # *** The problem is here *** 
        cumulative.set_index("weekday").join(total_amounts.set_index("weekday"))
    return cumulative

2 个答案:

答案 0 :(得分:1)

这是使用concat然后使用groupby的一种方法

df=pd.concat(list_of_dfs,keys=np.arange(len(list_of_dfs)))
df['weekday']=df.posted.dt.day_name()
l=[y.sum() for x ,y in df.groupby([df.index.get_level_values(0),df.weekday])['amount']]

如果需要在数据框中添加它们

yourdf=df.groupby([df.index.get_level_values(0),df.weekday])['amount'].sum()

答案 1 :(得分:0)

您可以为此使用Series.dt.date_name并将其传递给groupby函数:

df_new = df.groupby(df.posted.dt.day_name())['amount'].sum()

print(df_new)
posted
Monday      3656506
Saturday    3656506
Sunday      3656506
Thursday    7313012
Name: amount, dtype: int64