Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 取消激活/取消激活以创建动态列_Python_Pandas - Fatal编程技术网

Python 取消激活/取消激活以创建动态列

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

我有一个如下所示的数据帧: 我想取消此数据帧的融合,以便相同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
 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可能是一个预处理步骤。你到底想解决什么问题?现在..我的目标是期望的输出:)但为什么?如果你想做的一切都是看原始数据,为什么不看原始数据呢?我想数据争吵或数据大嚼总是这样不公平。。我们总是将数据放在前面……但我们希望以不同的方式看待它……)超级棒!!粘土上的金鸡纳达尔。