gpt4 book ai didi

python - 将函数/计算应用于 pandas 中的多列

转载 作者:行者123 更新时间:2023-12-01 01:46:58 26 4
gpt4 key购买 nike

我需要对 2 列执行条件计算。规则是一样的。我一直在使用两个函数并将它们应用到每一列,如下所示。

enter image description here

df = pd.DataFrame({'Min': [50, 50], 
'Max' : [150, 150],
'Rule': ['A', 'B']})

def adjust_min(row):
if row['Rule'] == 'A':
return row['Min'] * 5
elif row['Rule'] == 'B':
return row['Min'] * 10
else:
return row['Min']

def adjust_max(row):
if row['Rule'] == 'A':
return row['Max'] * 5
elif row['Rule'] == 'B':
return row['Max'] * 10
else:
return row['Max']

df['Min'] = df.apply(adjust_min, axis=1)

理想情况下,我想要一个适用于两列的函数,也许:

 if row['Rule'] == 'A':
return row * 5

有没有更有效的方法来做到这一点?谢谢!

最佳答案

矢量化,可以使用pd.DataFrame.multiply与字典映射一起。这将更加高效,因为它利用了 Pandas 数据帧后面的 NumPy 数组的连续内存块功能。 pd.DataFrame.apply 只是一个隐秘的循环,它更适合应用于列表而不是数据帧。

df = pd.DataFrame([[50, 150, 'A'],
[50, 150, 'B']],
columns=['Min', 'Max', 'Rule'])

# define dictionary mapping rule to factor
factors_map = {'A': 5, 'B': 10}

# create series of factors mapped from Rule
factors = df['Rule'].map(factors_map).fillna(1)

# multiply selected columns by factors
cols = ['Min', 'Max']
df[cols] = df[cols].multiply(factors, axis=0)

print(df)

Min Max Rule
0 250 750 A
1 500 1500 B

关于python - 将函数/计算应用于 pandas 中的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51212473/

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