gpt4 book ai didi

python - 在 Python 中生成多列值的条件语句

转载 作者:行者123 更新时间:2023-12-04 14:43:36 24 4
gpt4 key购买 nike

我正在尝试根据以下数据框中“数字”列中的条件替换“Alloc1”和“Alloc2”列中的值。

data = {'ID': ['001', '002', '003', '004'], 'Number': [99, 99, 20, 40], 'Alloc1': [np.NaN, np.NaN, np.NaN, np.NaN], 'Alloc2': [np.NaN, np.NaN, np.NaN, np.NaN]}
# Create DataFrame.
df = pd.DataFrame(data)
我根据条件插入值的代码如下:-
for  numbers  in df["Number"]:

if (numbers == 99):
df["Alloc1"] = 31
df["Alloc2"] = 3

else:
df["Alloc1"] = 0
df["Alloc2"] = numbers/2
上面似乎只执行语句的 else 部分以及“Number”列中不是 99 的最后一个值。我该如何解决这个问题?一个功能会很棒。理想的输出应该是:-
final = {'ID': ['001', '002', '003', '004'], 'Number': [99, 99, 20, 40], 'Alloc1': [31, 31, 0, 0], 'Alloc2': [3, 3, 10, 20]}
# Create DataFrame.
final_df = pd.DataFrame(final)

最佳答案

认为“矢量化”解决方案将具有比这更好的性能,无论是那个还是 where版本更“好 Pandas 风格”。这个答案只是为了向您展示如何使用更像您所遵循的方法来实现您想要的。这不是一种非常“ Pandas ”的做事方式,但可能有助于理解为什么您尝试的方法不起作用。

import pandas as pd

data = {'ID': ['001', '002', '003', '004'],
'Number': [99, 99, 20, 40]}
# Don't actually need the NaN-filled 'Alloc1' and 'Alloc2' yet
# Those columns get created when you give them values, later
df = pd.DataFrame(data)

def allocateCodes(row):
if (row['Number'] == 99):
row['Alloc1'] = 31
row['Alloc2'] = 3
else:
row['Alloc1'] = 0
row['Alloc2'] = row['Number'] / 2
return row

# axis="columns" means go 'take each row' (i.e., a whole set of columns)
# at a time (can also use axis=1)
# instead of 'take each column' (axis="rows" / axis=0)
outputDf = df.apply(allocateCodes, axis="columns")

print(outputDf)
输出:
    ID  Number  Alloc1  Alloc2
0 001 99 31 3.0
1 002 99 31 3.0
2 003 20 0 10.0
3 004 40 0 20.0

关于python - 在 Python 中生成多列值的条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69291365/

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