gpt4 book ai didi

python - 如何将数据框中的行与不同的列合并?

转载 作者:太空狗 更新时间:2023-10-30 01:04:11 24 4
gpt4 key购买 nike

我想将 dataframe 的行与一个公共(public)列值合并,然后合并以逗号分隔的其余列值以获取字符串值,并转换为数组/列表以获取 int 值。

A   B     C    D
1 one 100 value
4 four 400 value
5 five 500 value
2 two 200 value

期望结果如下:

   A                B                 C            D
[1,4,5,2] one,four,five,two [100,400,500,200] value

我可以对 D 列使用 groupby,但如何同时对 df 中的 B 列使用 apply(np.array) 和 apply(','.join)?

最佳答案

动态解决方案 - 字符串列被连接并且数字被转换为带有 GroupBy.agg 的列表:

f = lambda x: x.tolist() if np.issubdtype(x.dtype, np.number) else ','.join(x)
#similar for test strings - https://stackoverflow.com/a/37727662
#f = lambda x: ','.join(x) if np.issubdtype(x.dtype, np.flexible) else x.tolist()
df1 = df.groupby('D').agg(f).reset_index().reindex(columns=df.columns)
print (df1)
A B C D
0 [1, 4, 5, 2] one,four,five,two [100, 400, 500, 200] value

另一种解决方案是为每一列分别指定每个函数:

df2 = (df.groupby('D')
.agg({'A': lambda x: x.tolist(), 'B': ','.join, 'C':lambda x: x.tolist()})
.reset_index()
.reindex(columns=df.columns))

print (df2)

A B C D
0 [1, 4, 5, 2] one,four,five,two [100, 400, 500, 200] value

关于python - 如何将数据框中的行与不同的列合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56747344/

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