Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何合并来自';groupby';对几个不同数据帧的操作_Python 3.x_Pandas_Dataframe_Dask - Fatal编程技术网

Python 3.x 如何合并来自';groupby';对几个不同数据帧的操作

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

我读了一系列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列表如下所示:

[           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