python - 将函数/计算应用于熊猫中的多个列
问题描述
我需要对 2 列执行条件计算。规则是一样的。我一直在使用两个函数并将它们应用于每一列,如下所示。
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
只是一个薄薄的循环,可以更合适地应用于 alist
而不是数据帧。
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
推荐阅读
- c# - C# Linq 将合并列表设置为数据源
- python - MinIO python SDK在上传期间刷新访问令牌
- grep - 如何使用 grep 在所有名为 /src 的目录中递归搜索一个单词,并且只搜索 *.js 文件
- sql - SQL query to return all columns of max date for group by but exclude records where a different column for that group is not null
- ssl - 当通过 Intune SCEP 配置文件生成 TPM 芯片上的单个私钥时,您如何 PIN 保护它们
- javascript - 当dom被阻塞时如何注册click事件?
- android-studio - 未解决对来自 kotlinx.coroutines 的任何类的引用。包裹
- c# - NUnit - 任务中的 SqlConnection 超时
- android - 图片库 ViewGroup onClick
- python - API 未返回正确信息