gpt4 book ai didi

python - 如何通过引用python中pandas数据框中另一列的值来添加新列

转载 作者:太空宇宙 更新时间:2023-11-03 15:00:28 24 4
gpt4 key购买 nike

我下面有一个 pandas 数据框

df
index | ref | 1 | 2 | 3 | 4 | 5 |
1 | 1 | -3 | -2 | -9 | 0 | -2 |
2 | 3 | -1 | -2 | -5 | 3 | -5 |
3 | 5 | -4 | -7 | -4 | 2 | -1 |
4 | 4 | -2 | -4 | -2 | -1 | -9 |
5 | 1 | -2 | -3 | -1 | -3 | -3 |

我想通过引用“ref”列的值来创建"new"列,如下所示,

df
index | ref | 1 | 2 | 3 | 4 | 5 | new |
1 | 1 | -3 | -2 | -9 | 0 | -2 | -3 |
2 | 3 | -1 | -2 | -5 | 3 | -5 | -5 |
3 | 5 | -4 | -7 | -4 | 2 | -1 | -1 |
4 | 4 | -2 | -4 | -2 | -1 | -9 | -1 |
5 | 1 | -2 | -3 | -1 | -3 | -3 | -2 |

我尝试过以下方法,但由于内存不足而失败。 (代码中循环的东西)

df['new'] = df[df['ref']]

你能给我建议吗?

最佳答案

需要DataFrame.lookup ,但 ref 列中的列和值必须具有相同类型:

#values are ints
print (df['ref'].tolist())
[1, 3, 5, 4]
print (df.columns.tolist())
['ref', 1, 2, 3, 4, 5]
#values are strings
print (df['ref'].tolist())
['1', '3', '5', '4']
print (df.columns.tolist())
['ref', '1', '2', '3', '4', '5']
<小时/>
df['new '] = df.lookup(df.index, df['ref'])
print (df)
ref 1 2 3 4 5 new
index
1 1 -3 -2 -9 0 -2 -3
2 3 -1 -2 -5 3 -5 -5
3 5 -4 -7 -4 2 -1 -1
4 4 -2 -4 -2 -1 -9 -1

编辑:

如果列名称中的值是字符串,并且 ref 中的值是整数,则添加 astype转换:

print (df['ref'].tolist())
[1, 3, 5, 4]
print (df.columns.tolist())
['ref', '1', '2', '3', '4', '5']

df['new '] = df.lookup(df.index, df['ref'].astype(str))
print (df)
ref 1 2 3 4 5 new
index
1 1 -3 -2 -9 0 -2 -3
2 3 -1 -2 -5 3 -5 -5
3 5 -4 -7 -4 2 -1 -1
4 4 -2 -4 -2 -1 -9 -1

编辑1:

索引或列值中有重复项。

print (df.columns.is_unique)
True
print (df.index.is_unique)
False

所以需要唯一索引添加 reset_index :

df = df.reset_index(drop=True)
df['new '] = df.lookup(df.index, df['ref'].astype(str))
print (df)
ref 1 2 3 4 5 new
0 1 -3 -2 -9 0 -2 -3
1 3 -1 -2 -5 3 -5 -5
2 5 -4 -7 -4 2 -1 -1
3 4 -2 -4 -2 -1 -9 -1
4 1 -2 -3 -1 -3 -3 -2

关于python - 如何通过引用python中pandas数据框中另一列的值来添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45158218/

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