输入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
:
检查列l
和1
:第一个包含值,插入o
t
m
或n
o
{ {1}}列r
s
t
输出DataFrame:
z1
答案 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