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