用其他列的索引替换列表类型列项目

时间:2021-03-04 09:59:49

标签: python pandas dataframe

我有一个这样的数据框,

df
col1     col2       col3             col4
 1       [1,2]    [0,0,0,0]      [0,0,0,0]
 0       [2,3]    [0,0,0,0]      [0,0,0,0]

现在我想根据 col1 和 col2 的索引将 col3、col4 列表项替换为 1。所以数据框应该看起来像,

col1     col2       col3             col4
 1       [1,2]    [0,1,0,0]      [0,1,1,0]
 0       [2,3]    [1,0,0,0]      [0,0,1,1]    

我正在尝试使用 apply 函数或自定义函数,但没有得到想要的结果,正在寻找一些 Pandas 方法来有效地做到这一点。

1 个答案:

答案 0 :(得分:3)

在 Pandas 中使用 list 可能效率不高,这里是可能的解决方案:

def f(x):
    x['col4'] = [1 if i in x['col2'] else 0 for i, y in enumerate(x['col4'])]
    x['col3'] = [1 if i ==  x['col1'] else 0 for i, y in enumerate(x['col3'])]
    return x

df = df.apply(f, axis=1)
print (df)
   col1    col2          col3          col4
0     1  [1, 2]  [0, 1, 0, 0]  [0, 1, 1, 0]
1     0  [2, 3]  [1, 0, 0, 0]  [0, 0, 1, 1]