我尝试从某些列中提取数据并将其合并到新列中。我有熊猫数据框:
col1 col2 col3 col4
A No No No
A No No No
A No No No
No No No D
No B No No
No No C No
No No C No
我想获得新的专栏,例如:
col1 col2 col3 col4 targetCol
A No No No A
A No No No A
A No No No A
No No No D D
No B No No B
No No C No C
No No C No C
我尝试使用lambda和简单条件,但是它不起作用。一些无效的代码:
df['targetCol'] = df['A'] if df_razm['A'] != 'No' else None
错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
谢谢您的建议。
答案 0 :(得分:3)
在replace
上将max
与axis=1
一起使用
df['targetCol'] = df.replace('No', '').max(axis=1)
col1 col2 col3 col4 targetCol
0 A No No No A
1 A No No No A
2 A No No No A
3 No No No D D
4 No B No No B
5 No No C No C
6 No No C No C
答案 1 :(得分:2)
这是使用argmax
的一种方法:
df['targetCol'] = df.values[df.index, df.ne('No').values.argmax(1)]
col1 col2 col3 col4 targetCol
0 A No No No A
1 A No No No A
2 A No No No A
3 No No No D D
4 No B No No B
5 No No C No C
6 No No C No C
答案 2 :(得分:2)
您可以使用justify:
df=df.assign(target=justify(df.values,invalid_val='No')[:,0])
col1 col2 col3 col4 target
0 A No No No A
1 A No No No A
2 A No No No A
3 No No No D D
4 No B No No B
5 No No C No C
6 No No C No C
答案 3 :(得分:1)
尝试:
df['targetCol'] = df.replace("No", np.NaN).apply(lambda x: x.str.cat(), 1)
答案 4 :(得分:1)
也许您可以将apply与自定义功能一起使用:
def extract_value(x,invalid_value):
return x[x!=invalid_value].values[0]
df["target_column"]=df.apply(func=extract_value,axis=1,invalid_value="No")