【发布时间】:2020-10-27 22:21:04
【问题描述】:
我想根据条件以一种有效的方式将两个数据帧 df1 和 df2 相乘。
df1:
df1 = pd.DataFrame(columns=['user_id', 'gender', 'value_1', 'value_2', 'value_3'], data = [[112,0,50,60,70], [73,10,20,40,55],[61, 0, 15, 30, 45]])
user_id gender value_1 value_2 value_3
0 112 0 50 60 70
1 73 10 20 40 55
2 61 0 15 30 45
df2:
df2 = pd.DataFrame(columns=['gender', 'value_1', 'value_2', 'value_3'], data = [[2, 3, 5, 0], [4, 6, 7, 10]])
value_1 value_2 value_3 gender
0 2 3 5 0
1 4 6 7 10
我想将 df1 的 value_1、value_2、value_3 列乘以 df2,其中性别列在两个数据框中都匹配。 我已通过以下方式完成此操作,并且效果很好:
val_cols = ['value_1', 'value_2', 'value_3']
df1.loc[df1.gender==0, val_cols] *= df2[df2.gender==0][val_cols].values[0].tolist()
df1.loc[df1.gender==10, val_cols] *= df2[df2.gender==10][val_cols].values[0].tolist()
但这仅适用于性别列只有几个值的情况,在这种情况下它只能是 0 和 10。但是如果有更多不同的性别值怎么办? 如果性别值以及 df2 中的记录数较高,是否有更好的方法来执行此操作? PS:我的真实数据框非常大,所以我不能使用 apply 或 map 函数。
【问题讨论】:
标签: python pandas performance dataframe