gpt4 book ai didi

python - 按行值索引列表中的 Pandas 新列

转载 作者:行者123 更新时间:2023-12-03 19:43:55 24 4
gpt4 key购买 nike

我希望在 Pandas 数据框中创建一个新列,其中包含由 df 行值过滤的列表值。

df = pd.DataFrame({'Index': [0,1,3,2], 'OtherColumn': ['a', 'b', 'c', 'd']})

Index OtherColumn
0 a
1 b
3 c
2 d

l = [1000, 1001, 1002, 1003]

期望的输出:
  Index OtherColumn  Value
0 a -
1 b -
3 c 1003
2 d -

我的代码:
df.loc[df.OtherColumn == 'c', 'Value'] = l[df.Index]

它返回错误,因为 'df.Index' 不被识别为 int 而是一个列表(不是由 OtherColumn == 'c' 过滤)。

对于 R 用户,我正在寻找:
df[OtherColumn == 'c', Value := l[Index]]

谢谢。

最佳答案

将列表转换为 numpy 数组以进行索引,然后在两侧按掩码过滤:

m = df.OtherColumn == 'c'
df.loc[m, 'Value'] = np.array(l)[df.Index][m]
print (df)
Index OtherColumn Value
0 0 a NaN
1 1 b NaN
2 3 c 1003.0
3 2 d NaN

或使用 numpy.where :
m = df.OtherColumn == 'c'
df['Value'] = np.where(m, np.array(l)[df.Index], '-')
print (df)
Index OtherColumn Value
0 0 a -
1 1 b -
2 3 c 1003
3 2 d -

或者:
df['value'] = np.where(m, df['Index'].map(dict(enumerate(l))), '-')

关于python - 按行值索引列表中的 Pandas 新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58802510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com