gpt4 book ai didi

python - Groupby和转置 Pandas , python

转载 作者:太空宇宙 更新时间:2023-11-03 13:28:59 32 4
gpt4 key购买 nike

数据框有

ID  col  col2   col3   col4

1 A 50 S 1
1 A 52 M 4
1 B 45 N 8
1 C 18 S 7

想要数据框

ID  col  colA   colB   colC   colD   colE   colF

1 A 50 52 S M 1 4
1 B 45 NULL N NULL 8 NULL
1 C 18 NULL S NULL 7 NULL

我想要每个唯一 ID+col(groupby ID 和 col)一行。如果每个 ID+col 有多个条目(最大值可以是 2,不能再多),则将 col2 的第一个值放入 colA,将第二个值放入 colB,将 col3 的第一个值放入 colC,将第二个值放入 colD,将第一个值放入colE 中 col4 的值和 colF 中的第二个值。如果每个 ID+col 只有一个条目,那么对于 col2,将值放在 colA 中,colB 为 null 等。

我试着先创建一个计数器:

df['COUNT'] = df.groupby(['ID','col']).cumcount()+1

从这里开始,我想只添加一个列来说明

if count=1 then df['colA']=df.col2
if count=2 then df['colB']=df.col2

.. 但这仍然会导致与原始 df 相同的行数。

最佳答案

我认为需要set_indexunstack :

df['COUNT'] = df.groupby(['ID','col']).cumcount()+1

df = df.set_index(['ID','col', 'COUNT'])['col2'].unstack().add_prefix('col').reset_index()
print (df)
COUNT ID col col1 col2
0 1 A 50.0 52.0
1 1 B 45.0 NaN
2 1 C 18.0 NaN

或者:

c = df.groupby(['ID','col']).cumcount()+1

df = df.set_index(['ID','col', c])['col2'].unstack().add_prefix('col').reset_index()
print (df)
ID col col1 col2
0 1 A 50.0 52.0
1 1 B 45.0 NaN
2 1 C 18.0 NaN

编辑:

对于多列,解决方案有点改变,因为在列中使用 MultiIndex:

df['COUNT'] = (df.groupby(['ID','col']).cumcount()+1).astype(str)

#remove col2
df = df.set_index(['ID','col', 'COUNT']).unstack()
#flatten Multiindex
df.columns = df.columns.map('_'.join)
df = df.reset_index()
print (df)
ID col col2_1 col2_2 col3_1 col3_2 col4_1 col4_2
0 1 A 50.0 52.0 S M 1.0 4.0
1 1 B 45.0 NaN N None 8.0 NaN
2 1 C 18.0 NaN S None 7.0 NaN

关于python - Groupby和转置 Pandas , python ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50352271/

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