我有一个数据框,我想在其中满足某些条件的列之间进行一些操作。
例如,我有下表:
我感兴趣的是,从具有Mar = P
但相同的Mar = I
的每一列中减去Type
的每一列
最后,我想要以下内容:
注意:这些值仅供参考。
谢谢。
答案 0 :(得分:0)
除非我误解了这个问题,否则这似乎是掩盖的简单情况。
dict = {'Size':['A', 'B', 'C', 'D'],'Com':['P', 'G', 'P', 'G'], 'Mar':['I', 'P', 'I', 'P'], 'Type':['Lambda1', 'Lambda2', 'Lambda1', 'Lambda2'],'0':[1,2,3,4], '1':[2,2,2,2],'2':[3,3,3,3,], '3':[4,4,4,4]}
df = pd.DataFrame(dict)
#To get Lambda1 & 'I'
df[(df['Type']=='Lambda1') & (df['Mar']=='I')].T
#To get Lambda2 & 'P'
df[(df['Type']=='Lambda2') & (df['Mar']=='P')].T
答案 1 :(得分:0)
您可以尝试以下方法:
df = pd.DataFrame({'Size':[*'ABCDEF'],'Com':[*'PGPGPG'], 'Mar':[*'IPIPEA'],
'0':[1,2,3,4,5,6],
'1':[2,2,2,2,2,2],
'2':[3,3,3,3,3,3],
'3':[4,4,4,4,4,4],
'Type':['Lamba1']*2+['Lamba2']*2+['Lamba1']*2})
df1 = df.set_index(['Size','Com','Mar','Type']).T
print(df1)
输入数据框输出:
Size A B C D E F
Com P G P G P G
Mar I P I P E A
Type Lamba1 Lamba1 Lamba2 Lamba2 Lamba1 Lamba1
0 1 2 3 4 5 6
1 2 2 2 2 2 2
2 3 3 3 3 3 3
3 4 4 4 4 4 4
使用pd.IndexSlice
和groupby
:
idx = pd.IndexSlice
df_out = df1.loc[:,idx[:,:,'I':'P',:]].T.groupby('Type').diff().dropna().T.rename({'B':'L','D':'L','G':'C','P':'X'}, axis=1)
print(df_out)
输出结果:
Size L
Com C
Mar X
Type Lamba1 Lamba2
0 1.0 1.0
1 0.0 0.0
2 0.0 0.0
3 0.0 0.0