gpt4 book ai didi

python - 如何有条件地转换 pandas 数据框列

转载 作者:行者123 更新时间:2023-11-28 22:09:02 25 4
gpt4 key购买 nike

我有 2 个要循环的列,“Volume_hedge”和“Unit_hedge”。对于每一行,如果“Unit_hedge”中的数据表示“每天千桶”,我想除以“Volume_hedge”中的数字(与等于“每天千桶”的“Unit_hedge”在同一行") 增加 1000。

我已经尝试遍历枚举的列和之后的 if 语句。正如我所说,我负责前两行,但不负责其余两行。

df2 = DataFrame(x)
columns_to_select = ['Volume_hedge', 'Unit_hedge']
for i, row in enumerate(columns_to_select):
if df2['Unit_hedge'].loc[i] == 'Thousands of Barrels per Day':
new_row = df2['Volume_hedge'].loc[i] / 1000
else:
none
df2['Volume_hedge'].loc[i] = new_row
print(df2[columns_to_select].loc[0:8])

预期结果:

  Volume_hedge                    Unit_hedge
0 0.03 Thousands of Barrels per Day
1 0.024 Thousands of Barrels per Day
2 0.024 Thousands of Barrels per Day
3 0.024 Thousands of Barrels per Day
4 0.024 Thousands of Barrels per Day
5 0.024 Thousands of Barrels per Day
6 0.024 Thousands of Barrels per Day
7 32850000 (MMBtu/Bbl)
8 4404000 (MMBtu/Bbl)

实际结果:

 Volume_hedge                    Unit_hedge
0 0.03 Thousands of Barrels per Day
1 0.024 Thousands of Barrels per Day
2 24 Thousands of Barrels per Day
3 24 Thousands of Barrels per Day
4 24 Thousands of Barrels per Day
5 24 Thousands of Barrels per Day
6 24 Thousands of Barrels per Day
7 32850000 (MMBtu/Bbl)
8 4404000 (MMBtu/Bbl)

最佳答案

你应该使用 np.select这里:

import numpy as np

df2["Volume_hedge"] = np.select(
[df2["Unit_hedge"].eq("Thousands of Barrels per Day")],
[df2["Volume_hedge"].div(1000)],
df2["Volume_hedge"]
)

这会将所有 Unit_hedge 等于“每天千桶数”的行除以 1000,并使所有其他行保持不变。

这还有一个好处是不用迭代完成,使用pandasnumpy时速度更快

关于python - 如何有条件地转换 pandas 数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57929681/

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