更改由列表组成的df列

时间:2019-01-29 09:13:30

标签: python pandas dataframe

我有一个数据框列“结果”,它包含诸如["1","0"],["2","3"],["0","0"]等的值(字符串列表),

我想做的是更改“结果”列的值。例如,如果列表的第一个元素大于第二个,则值将为1。如果第二个元素大于,则值将为2,然后如果它们相等,则值为0。

如何有效地做到这一点?

2 个答案:

答案 0 :(得分:3)

使用:

df = pd.DataFrame({'col':[["1","0"],["2","3"],["0","0"]]})

def check(x):
    a, b = x
    a = int(a)
    b = int(b)
    if a == b:
        return 0
    elif a > b:
        return 1
    else:
        return 2

df['new'] = [check(x) for x in df['col']]
print (df)
      col  new
0  [1, 0]    1
1  [2, 3]    2
2  [0, 0]    0

另一种解决方案:

df1 = pd.DataFrame(df['col'].values.tolist(), columns=['a','b']).astype(int)
print (df1)
   a  b
0  1  0
1  2  3
2  0  0

masks = [df1.a > df1.b, df1.a < df1.b]
vals = [1,2]

df['new'] = np.select(masks, vals, default=0)
print (df)
      col  new
0  [1, 0]    1
1  [2, 3]    2
2  [0, 0]    0

答案 1 :(得分:2)

您还可以使用:

m=pd.DataFrame(df.a.values.tolist()).astype(int).add_prefix('val_')
df['new'] = np.select([m.val_0>m.val_1,m.val_0<m.val_1,m.val_0==m.val_1],[1,2,0])
print(df)

        a  new
0  [1, 0]    1
1  [2, 3]    2
2  [0, 0]    0
相关问题