有条件的操作

时间:2018-10-29 12:55:45

标签: python-3.x pandas dataframe

我有一个数据框,我想在其中满足某些条件的列之间进行一些操作。

例如,我有下表:

enter image description here

我感兴趣的是,从具有Mar = P但相同的Mar = I的每一列中减去Type的每一列

最后,我想要以下内容:

注意:这些值仅供参考。

enter image description here

enter image description here

谢谢。

2 个答案:

答案 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.IndexSlicegroupby

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