根据条件选择数据框列

时间:2018-04-27 09:55:02

标签: python pandas dataframe

输入DataFrame:

    a   b  c    d   e    f    g       j   k  l    m    n    o    p    q   r      s  t
2  33  17  0  418  -5  -81  NaN   14336  81  1  462  -24  NaN   81    1   462  -24 NaN  
5  33  17  0  415  -5  -116 NaN   14336  81  0  487   -5  116   81    1   462  -24 NaN 
7  33  17  0  413  -5  -116 NaN   14336  81  1  462  -24  NaN   81    1   462  -24 -111 

检查列c的值是否等于0:将d e f的值插入{{1} }} x1 x2 检查列x3的值是否等于l:将0 m n的值插入o { {1}} y1

如果列y2的值等于y3: 检查列l1:第一个包含值,插入o t mn o { {1}}列r s t

输出DataFrame:

z1

1 个答案:

答案 0 :(得分:0)

我认为需要where按条件过滤concat才能将所有DataFrame加在一起,而combine_first则用NaN替换另一个DataFrame df1 = df[['d','e','f']].where(df['c'].eq(0)) df1.columns = ['x1','x2','x3'] df2 = df[['m','n','o']].where(df['l'].eq(0)) df2.columns = ['y1','y2','y3'] df31 = df[['m','n','o']].where(df['l'].eq(1) & df['o'].notnull()) df31.columns = ['z1','z2','z3'] df32 = df[['r','s','t']].where(df['l'].eq(1) & df['t'].notnull()) df32.columns = ['z1','z2','z3'] df = pd.concat([df1, df2, df31.combine_first(df32)], axis=1) print (df) x1 x2 x3 y1 y2 y3 z1 z2 z3 2 418 -5 -81 NaN NaN NaN NaN NaN NaN 5 415 -5 -116 487.0 -5.0 116.0 NaN NaN NaN 7 413 -5 -116 NaN NaN NaN 462.0 -24.0 -111.0 }}:

method_missin