如何在几个不同的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'操作的结果的主要内容,如果未能解决你的问题,请参考以下文章