我有一个数据框列“result”,它包含像 ["1","0"],["2","3"],["0","这样的值(字符串列表) 0"]
等,
我想做的是更改“结果”列的值。例如,如果列表的第一个元素大于第二个,则值为 1。如果第二个更大,则值为 2 和如果它们相等,则该值将为 0。
我怎样才能有效地做到这一点?
最佳答案
使用:
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
关于python - 更改由列表组成的 df 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54417423/