Python 3.x 如何合并来自';groupby';对几个不同数据帧的操作
我读了一系列csv文件。每个都包含不同用户的事务数据历史记录。我想按工作日汇总整个集团的交易金额。为每个用户做摘要很容易,但我在汇总结果时遇到了一个问题 对于每个用户,数据如下所示:Python 3.x 如何合并来自';groupby';对几个不同数据帧的操作,python-3.x,pandas,dataframe,dask,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 0000001
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列表如下所示:
[ amount
weekday
Monday 43118
Wednesday 5872780, amount
weekday
Friday 1249
Monday 2566648
Wednesday 12000]
从这个列表中,我想生成一个只有两列的数据框,“weekday”和“amount”,其中amount是所有用户一天的总数
下面是我使用的代码,它给出了一个“ValueError:无法将列amount转换为class'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
下面是一种使用
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\u name
,并将其传递给groupby函数:
df_new = df.groupby(df.posted.dt.day_name())['amount'].sum()
您希望输出在列表中,还是在新的数据帧中?创建一个新的dataframe.Tnx更有意义。对“.concat”的引用澄清了很多需要发生的事情;我就是这么想的。
print(df_new)
posted
Monday 3656506
Saturday 3656506
Sunday 3656506
Thursday 7313012
Name: amount, dtype: int64