我有一个数据框列“结果”,它包含诸如["1","0"],["2","3"],["0","0"]
等的值(字符串列表),
我想做的是更改“结果”列的值。例如,如果列表的第一个元素大于第二个,则值将为1。如果第二个元素大于,则值将为2,然后如果它们相等,则值为0。
如何有效地做到这一点?
答案 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