比较 pandas 中的两列

Compare Two column in pandas

我有一个这样的数据框

|  A    | B | C |
|-------|---|---|
| ['1'] | 1 | 1 |
|['1,2']| 2 |   |
| ['2'] | 3 | 0 |
|['1,3']| 2 |   |

如果引号内 B 的值等于 A,则 C 为 1。如果 A 中不存在,则为 0。预期输出为:

|  A    | B | C |
|-------|---|---|
| ['1'] | 1 | 1 |
|['1,2']| 2 | 1 |
| ['2'] | 3 | 0 |
|['1,3']| 2 | 0 |

像这样我想获取多行的数据框。如何在python中写入得到这种数据框?

df['C'] = np.where(df['B'].astype(str).isin(df.A), 1,0)

基本上您需要将列 b 转换为字符串,因为列 A 是字符串。然后在 columnA 中寻找 B 列。

结果将如您所定义。

如果 A 中的值是字符串,请使用:

print (df.A.tolist())
["['1']", "['1,2']", "['2']", "['1,3']"]

df['C'] = [int(str(b) in a.strip("[]'").split(',')) for a, b in zip(df.A, df.B)]
print (df)
         A  B  C
0    ['1']  1  1
1  ['1,2']  2  1
2    ['2']  3  0
3  ['1,3']  2  0

或者如果值是一个元素列表使用:

print (df.A.tolist())
[['1'], ['1,2'], ['2'], ['1,3']]

df['C'] = [int(str(b) in a[0].split(',')) for a, b in zip(df.A, df.B)]
print (df)
       A  B  C
0    [1]  1  1
1  [1,2]  2  1
2    [2]  3  0
3  [1,3]  2  0

我的代码:

df = pd.read_clipboard()
df
'''
         A  B
0    ['1']  1
1  ['1,2']  2
2    ['2']  3
3  ['1,3']  2
'''

(
    df.assign(A=df.A.str.replace("'",'').map(eval))
    .assign(C=lambda d: d.apply(lambda s: s.B in s.A, axis=1))
    .assign(C=lambda d: d.C.astype(int))
)
'''
        A  B  C
0     [1]  1  1
1  [1, 2]  2  1
2     [2]  3  0
3  [1, 3]  2  0
'''