将多个pandas行组合成一个不同标题的单个记录

2024-09-29 18:50:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用户表,上面列出了他们每天的花费。我想将它们重新排列为每个用户一行,并用列表示他们每天花了多少钱。在

user_id   day    spending

111       mon      15
111       tues     20
111       weds     25
....
122       mon      44
122       tues     34
122       weds     90
122       thurs     26
....

我想把桌子折叠成表格

^{pr2}$

现在,这段代码将每日列(周一、周二、周三等)初始化为全零,然后将每个列中的每日支出数据放入for循环中,除了当天的支出之外,其他所有列都应为零,这将导致一个对角矩阵表。然后我把所有的值相加,得到一个行记录中的所有值。现在这段代码在一个小数据集上工作,但是for循环在我的完整数据集上花费了很长时间:

for i,hr in zip(np.arange(len(df)),df['day']):
     df.ix[i,hr]=df1_subset.ix[i,"spending"]
# aggregate the users by id and dates
df = df.groupby('id').sum()

有什么方法可以让我使用更多的pandas正确的操作来避免for循环或使其更快?在

谢谢。在


Tags: 数据代码用户iddfforhr集上
2条回答
df.pivot(index='user_id', columns='day').fillna(0)
Out[50]: 
        spending                
day          mon thurs tues weds
user_id                         
111           15     0   20   25
122           44    26   34   90

或者,如果需要自定义聚合函数,请使用pivot_table

^{pr2}$

你可以利用数据帧.pivot为了达到这个目的。如果将表存储在名为df的数据帧中,则代码将为

Table = df.pivot(index='userid',columns='day',values='spending')

相关问题 更多 >

    热门问题