Python 根据条件选择dataframe列

Python 根据条件选择dataframe列,python,pandas,dataframe,Python,Pandas,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

输入数据帧:

    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 
    x1  x2    x3    y1    y2    y3    z1   z2    z3
2  418  -5   -81   NaN   NaN   NaN   462  -24   NaN
5  415  -5  -116   487    -5   116   462  -24   NaN
7  413  -5   -81   NaN   NaN   NaN   462  -24  -111
检查列
c
的值是否等于
0
:将
d
e
f
的值插入
x1
x2
x3
检查列
l
的值是否等于
0
:将
m
n
o
的值插入
y1
y2
y3

如果列
l
的值等于
1
: 检查列
o
t
:第一个包含值的列,将
m
n
o
,或
r
s
t
插入列
z1
z2
z3

输出数据帧:

    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 
    x1  x2    x3    y1    y2    y3    z1   z2    z3
2  418  -5   -81   NaN   NaN   NaN   462  -24   NaN
5  415  -5  -116   487    -5   116   462  -24   NaN
7  413  -5   -81   NaN   NaN   NaN   462  -24  -111
我认为需要按条件筛选,以便将所有
DataFrame
s连接在一起,并将
NaN
s替换为另一个
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

您是否遇到了问题的某个特定部分?能否进一步解释第一个包含值的部分?我的解决方案是如何工作的?这就是你想要的?答案与期望的结果不同,因为问题不清楚。