gpt4 book ai didi

python - Pandas 部分转置

转载 作者:行者123 更新时间:2023-12-01 08:22:07 25 4
gpt4 key购买 nike

我想通过转置某些列并修复其他列来重新格式化数据框。

原始数据:

ID  subID  values_A  
-- ----- --------
A aaa 10
B baa 20
A abb 30
A acc 40
C caa 50
B bbb 60

旋转一次:

 pivot_table( df, index = ["ID", "subID"] )

输出:

ID  subID  values_A 
-- ----- --------
A aaa 10
abb 30
acc 40

B baa 20
bbb 60

C caa 50

我想要做什么(修复 ['ID'] 列和部分转置):

ID  subID_1  value_1   subID_2  value_2  subID_3  value_3
-- ------- ------- -------- ------- ------- -------
A aaa 10 abb 30 acc 40
B baa 20 bbb 60 NaN NaN
C caa 50 NaN NaN NaN NaN

据我所知,每个 ID 下的最大 subID 计数值。

在数据透视和转置数据帧时,我不需要任何计算值。

请帮忙

最佳答案

使用cumcount对于计数器,通过 set_index 创建 MultiIndex , reshape unstack并按 sort_index列中的 MultiIndex 的第一级进行排序。最后通过列表理解使用 reset_index 将其展平:

g = df.groupby('ID').cumcount()

df = df.set_index(['ID', g]).unstack().sort_index(level=1, axis=1)
#python 3.6+
df.columns = [f'{a}_{b+1}' for a, b in df.columns]
#python bellow
#df.columns = ['{}_{}'.format(a, b+1) for a, b in df.columns]
df = df.reset_index()
print (df)
ID subID_1 values_A_1 subID_2 values_A_2 subID_3 values_A_3
0 A aaa 10.0 abb 30.0 acc 40.0
1 B baa 20.0 bbb 60.0 NaN NaN
2 C caa 50.0 NaN NaN NaN NaN

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

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