gpt4 book ai didi

python - Groupby 并 reshape 长到宽格式的数据框,同时将元素聚合为数组

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

假设我有一个这样的数据框:

    user  order  value
0 1 0 90
1 1 10 80
2 1 20 70
3 2 30 60
4 2 40 50
5 2 50 40
6 3 60 30
7 3 70 20
8 3 80 10

现在我希望像这样 reshape 它,每个用户都有自己的行值。请注意,该行是根据数据框中 order 列中的值排序的。

         1    2    3 ...
user
1 90 80 70
2 60 50 40
3 30 20 10

甚至保留原始数据框中的顺序和任何其他值,以便每个组件都是一个数组:

          1           2          3 ...
user
1 [0, 90] [10, 80] [20, 70]
2 [30, 60] [40, 50] [50, 40]
3 [60, 30] [70, 20] [80, 10]

这个操作叫什么,是否可以在 Pandas 中用几行代码完成?

最佳答案

第一个输出:

您可以使用 groupby使用 lambda 函数,其中通过 Series.values 创建 numpy 数组 :`:

df = df.groupby('user')['value'].apply(lambda x: pd.Series(x.values)).unstack()
df.columns = df.columns + 1
print (df)
1 2 3
user
1 90 80 70
2 60 50 40
3 30 20 10

第二个输出:

您可以使用 groupby使用 lambda 函数,其中通过 DataFrame.values 创建 numpy 数组 ,它们被转换为 list 并最后转换为 Series:

#for add 1 tp column names use rename
df = df.groupby('user')
.apply(lambda x: pd.Series(x[['order','value']].values.tolist())
.rename(index=lambda x: x+1))
print (df)
1 2 3
user
1 [0, 90] [10, 80] [20, 70]
2 [30, 60] [40, 50] [50, 40]
3 [60, 30] [70, 20] [80, 10]

df = df.groupby('user').apply(lambda x: pd.Series(x[['order','value']].values.tolist()))
#add 1 to column names last
df.columns = df.columns + 1
print (df)
1 2 3
user
1 [0, 90] [10, 80] [20, 70]
2 [30, 60] [40, 50] [50, 40]
3 [60, 30] [70, 20] [80, 10]

关于python - Groupby 并 reshape 长到宽格式的数据框,同时将元素聚合为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42206413/

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