gpt4 book ai didi

python - 如何按列分组并将一组的所有值复制到 Pandas 中的一行?

转载 作者:太空宇宙 更新时间:2023-11-03 11:20:43 24 4
gpt4 key购买 nike

这是我的数据集的示例:

Consumer_num | billed_units  
29 | 984
29 | 1244
29 | 2323
29 | 1232
29 | 1150
30 | 3222
30 | 1444
30 | 2124

我想按 consumer_num 分组,然后将每组的所有值 (billed_units) 添加到新列中。所以我需要的输出:

Consumer_num | month 1 | month 2 | month 3 | month 4  | month 5  
29 | 984 | 1244 | 2323 | 1232 | 1150
30 | 3222 | 1444 | 2124 | NaN | NaN

这是我到目前为止所做的:

group = df.groupby('consumer_num')['billed_units'].unique()
group[group.apply(lambda x: len(x)>1)]
df = group.to_frame()
print df

输出:

Consumer_num | billed_units  
29 | [984,1244,2323,1232,1150]
30 | [3222,1444,2124]

不知道我的做法对不对。如果它是正确的,那么我想知道如何分离每个消费者的 billed_units,然后添加到新列,如我在所需输出中所示。或者是否有更好的方法来实现我所需的输出?

最佳答案

解决方案

c = 'Consumer_num'
m = 'month {}'.format
df.set_index(
[c, df.groupby(c).cumcount() + 1]
).billed_units.unstack().rename(columns=m).reset_index()

Consumer_num month 1 month 2 month 3 month 4 month 5
0 29 984.0 1244.0 2323.0 1232.0 1150.0
1 30 3222.0 1444.0 2124.0 NaN NaN

它是如何工作的

  • 为方便起见,将'Consumer_num'放入变量c
  • 为方便起见,将映射器函数放入变量m
  • 用两列设置​​索引来创建一个pd.MultiIndex
    • 我使用 groupbycumcount 创建一个关卡以unstack
    • 然后我unstack
  • 最后使用映射函数重命名列

回复评论

限制月数的一种方法是使用 iloc。以下将我们限制为 3 个月。您可以调整为前 5 个。nans 应该照顾好自己。

c = 'Consumer_num'
m = 'month {}'.format
df.set_index(
[c, df.groupby(c).cumcount() + 1]
).billed_units.unstack().rename(columns=m).iloc[:, :3].reset_index()
# ^..........^

Consumer_num month 1 month 2 month 3
0 29 984.0 1244.0 2323.0
1 30 3222.0 1444.0 2124.0

或者你可以预处理

c = 'Consumer_num'
m = 'month {}'.format
d1 = df.groupby(c).head(3) # pre-process and take just first 3
d1.set_index(
[c, d1.groupby(c).cumcount() + 1]
).billed_units.unstack().rename(columns=m).reset_index()

关于python - 如何按列分组并将一组的所有值复制到 Pandas 中的一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43404943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com