如何在几个不同的Dataframe上合并'groupby'操作的结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在几个不同的Dataframe上合并'groupby'操作的结果相关的知识,希望对你有一定的参考价值。

我读了一系列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文件并为每个用户构建一个Dataframe列表。然后我处理Dataframes以首先获得按工作日的金额摘要,然后尝试聚合所有用户的结果。

对于两个用户,累积的数据帧列表看起来像这样:

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

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

我正在使用的代码如下,它给出了“ValueError:无法将列数量转换为类型类'int'”。我也试过使用'append'和'join'但是无法使它们工作,因为Dataframes的大小并不相同。 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
答案

这是使用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()
另一答案

您可以使用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

以上是关于如何在几个不同的Dataframe上合并'groupby'操作的结果的主要内容,如果未能解决你的问题,请参考以下文章

R 两个dataframe其中一列内容相同,但是顺序不同,如何合并?

在几个 NSView 之间交替

不同版本间 Git 合并的最佳实践

合并具有几个不同列的两个数据框

正则表达式如何在几个汉字词组之间选择

当DataFrame具有不同的值时,如何将重复行合并为一个