我想通过转置某些列并修复其他列来重新格式化数据框。
原始数据:
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下的最大子ID计数值。
在透视和转置数据框时,我不需要任何计算值。
请帮助
答案 0 :(得分:1)
使用cumcount
进行计数,用set_index
创建MultiIndex
,用unstack
重塑形状,并用sort_index
对MultiIndex in columns
的第一级进行排序。最后用reset_index
用list comprehension
对其进行展平:
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