猿问

根据特定列的条件将两个数据帧相乘的有效方法

我想根据条件以有效的方式将两个数据帧 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 函数。


九州编程
浏览 100回答 1
1回答

料青山看我应如是

您可以.set_index()在gender两个数据帧上然后执行以下操作df.mul():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]])df2 = pd.DataFrame(columns=['value_1', 'value_2', 'value_3', 'gender'], data = [[2, 3, 5, 0], [4, 6, 7, 10]])df1 = df1.set_index(['gender', 'user_id'])df2 = df2.set_index('gender')out = df1.mul(df2, level=0)print(out)印刷:                value_1  value_2  value_3gender user_id                           0      112          100      180      35010     73            80      240      3850      61            30       90      225
随时随地看视频慕课网APP

相关分类

Python
我要回答