[英]Merging columns in pandas if none
I have the following table (df):我有下表(df):
ColA![]() |
ColB![]() |
ColC![]() |
ColD![]() |
---|---|---|---|
A![]() |
A11 ![]() |
None![]() |
Q1![]() |
B![]() |
A21 ![]() |
Q12 ![]() |
None![]() |
A![]() |
A31 ![]() |
S1 ![]() |
None![]() |
C ![]() |
A41 ![]() |
W12 ![]() |
None![]() |
B![]() |
A76 ![]() |
None![]() |
O91 ![]() |
A![]() |
A90 ![]() |
A14 ![]() |
None![]() |
C ![]() |
A71 ![]() |
None![]() |
R31 ![]() |
The output table should contain another column (ColE) such that, ColA value A is always from ColB, B and C are from ColC, ColD.输出表应包含另一列 (ColE),使得 ColA 值 A 始终来自 ColB,B 和 C 来自 ColC、ColD。 If the ColC value is none it should take the value from ColD.
如果 ColC 值为 none,则应从 ColD 获取值。 What I tried so far?
到目前为止我尝试了什么?
if 'A' in df.ColA:
df['ColE'] = df['ColB']
elif 'B' or 'C' in df.ColA:
df['ColE']=df['ColC'].fillna(df['ColD'])
or要么
df['ColE']=[df['ColB'] if 'A' in df['ColA'] else df['ColC'].fillna(df['ColD'])]
But, this doesn't merge all the values.但是,这不会合并所有值。 It only works for one if-condition.
它只适用于一个 if 条件。 How do I solve it?
我该如何解决?
Desired output:期望的输出:
ColA![]() |
ColB![]() |
ColC![]() |
ColD![]() |
ColE![]() |
---|---|---|---|---|
A![]() |
A11 ![]() |
None![]() |
Q1![]() |
A11 ![]() |
B![]() |
A21 ![]() |
Q12 ![]() |
None![]() |
Q12 ![]() |
A![]() |
A31 ![]() |
S1 ![]() |
None![]() |
A31 ![]() |
C ![]() |
A41 ![]() |
W12 ![]() |
None![]() |
W12 ![]() |
B![]() |
A76 ![]() |
None![]() |
O91 ![]() |
O91 ![]() |
A![]() |
A90 ![]() |
A14 ![]() |
None![]() |
A90 ![]() |
C ![]() |
A71 ![]() |
None![]() |
R31 ![]() |
A71 ![]() |
We can create a boolean mask by checking the presence of A
in ColA
, then use this mask with np.where
, select the values from ColB
if the mask holds True
otherwise select the values from ColC
/ ColD
giving preference to ColC
我们可以通过检查的情况下创建一个布尔口罩
A
在ColA
,然后用这个面膜用np.where
,从选择值ColB
如果屏蔽持有True
,否则选择的值ColC
/ ColD
优先考虑ColC
m = df['ColA'].eq('A')
df['ColE'] = np.where(m, df['ColB'], df['ColC'].fillna(df['ColD']))
ColA ColB ColC ColD ColE
0 A A11 None Q1 A11
1 B A21 Q12 None Q12
2 A A31 S1 None A31
3 C A41 W12 None W12
4 B A76 None O91 O91
5 A A90 A14 None A90
6 C A71 None R31 R31
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.