Python 取消激活/取消激活以创建动态列
我有一个如下所示的数据帧: 我想取消此数据帧的融合,以便相同I_S值的不同IV值进入单独的列,IC列也是如此Python 取消激活/取消激活以创建动态列,python,pandas,Python,Pandas,我有一个如下所示的数据帧: 我想取消此数据帧的融合,以便相同I_S值的不同IV值进入单独的列,IC列也是如此 df_1.columns Index(['I_Y', 'I_DY', 'I_H', 'I_M', 'I_S', 'IB', 'ISZ'], dtype='object', name='BSF') 'I_Y', 'I_DY', 'I_H', 'I_M', 'I_S', 'IV', 'IC' 2015 55 21 57 8 5.67 200
df_1.columns
Index(['I_Y', 'I_DY', 'I_H', 'I_M', 'I_S', 'IB', 'ISZ'], dtype='object', name='BSF')
'I_Y', 'I_DY', 'I_H', 'I_M', 'I_S', 'IV', 'IC'
2015 55 21 57 8 5.67 200
2015 55 21 57 8 5.66 100
2015 55 21 57 9 5.65 200
2015 55 21 57 9 5.64 200
2015 55 21 57 10 5.67 200
2015 55 21 57 10 5.66 200
2015 55 21 57 10 5.65 600
2015 55 21 57 10 5.64 200
期望输出:
'I_Y', 'I_DY', 'I_H', 'I_M', 'I_S', 'IV1','IC1','IV2','IC2','IV3','IC3','IV4','IC4'
2015 55 21 57 8 5.67 200 5.66 100
2015 55 21 57 9 5.65 200 5.63 200
2015 55 21 57 10 5.67 200 5.66 200 5.65 600 5.64 200
因为我不知道IV可以达到多少级别,所以我想让它变得动态,并为每个级别创建一个列。(我所说的级别是指不同的IV值)用于重塑,但首先获取所有不带IV
和IC
的列,然后创建计数器,最后按列中的MultiIndex
的第二级排序,并按列表中的f-string
s展平MultiIndex
:
df.columns = df.columns.str.strip("'")
cols = df.columns.difference(['IV','IC']).tolist()
g = df.groupby(cols).cumcount().add(1)
df1 = df.set_index(cols + [g]).unstack().sort_index(axis=1, level=1)
df1.columns = [f'{x}{y}' for x, y in df1.columns]
df1 = df1.reset_index()
print (df1)
I_DY I_H I_M I_S I_Y IC1 IV1 IC2 IV2 IC3 IV3 IC4 \
0 55 21 57 8 2015 200.0 5.67 100.0 5.66 NaN NaN NaN
1 55 21 57 9 2015 200.0 5.65 200.0 5.64 NaN NaN NaN
2 55 21 57 10 2015 200.0 5.67 200.0 5.66 600.0 5.65 200.0
IV4
0 NaN
1 NaN
2 5.64
在实际更改某些数据之前,取消融合DF可能是一个预处理步骤。你到底想解决什么问题?现在..我的目标是期望的输出:)但为什么?如果你想做的一切都是看原始数据,为什么不看原始数据呢?我想数据争吵或数据大嚼总是这样不公平。。我们总是将数据放在前面……但我们希望以不同的方式看待它……)超级棒!!粘土上的金鸡纳达尔。