有一个数据帧。在检查了以下条件后,我想添加列"e"。
- 如果"c"的组件在列"a"中,并且"d"的组件位于同一行的列"b"中,则e的组件可以否则">
import pandas as pd
import numpy as np
A = {'a':[0,2,1,4], 'b':[4,5,1,7],'c':['1','2','3','6'], 'd':['1','4','2','9']}
df = pd.DataFrame(A)
我想得到的结果是
A = {'a':[0,2,1,4], 'b':[4,5,1,7],'c':['1','2','3','6'], 'd':['1','4','2','9'], 'e':['OK','','','']}
您可以在左侧的['a', 'b']
和右侧的['c', 'd']
上将df
与自身合并。如果索引在合并中"幸存",则e
应为OK
:
df['e'] = np.where(
df.index.isin(df.merge(df, left_on=['a', 'b'], right_on=['c', 'd']).index),
'OK', '')
df
输出:
a b c d e
0 0 4 1 1 OK
1 2 5 2 4
2 1 1 3 2
3 4 7 6 9
附言:在合并之前,我们需要将a
和b
列转换为str
类型(或将c
和d
转换为数字(,以便比较c
和a
,以及d
和b
:
df[['a', 'b']] = df[['a', 'b']].astype(str)