繁体   English   中英

将列值与两个数据框的另一列值相乘

[英]Multiply column values with another column values of two dataframes

有两个dataframe

print(priority)
ConnectionID Value
1     CN01491920     2
3     CN01491922     2
5     CN01491931     1
7     CN01491928     2
9     CN01491935     2
..           ...   ...
589   CN01493318     1
591   CN01493288     1
593   CN01493307     1
595   CN01493322     2
597   CN01493321     2

[299 rows x 2 columns]
print(client)
   ConnectionID  Value
0    CN01493292   1400
1    CN01493278    864
2    CN01493318    616
3    CN01493346    413
4    CN01492425    412
5    CN01493307    211
6    CN01492290    111
7    CN01492933    106
8    CN01493112     96
9    CN01492697     94
10   CN01492209     93
11   CN01493277     93
12   CN01492456     93
13   CN01493259     93
14   CN01493342     93
15   CN01492533     93
16   CN01491983     93
17   CN01492705     93
18   CN01492417     93
19   CN01492828     93
20   CN01493321     93
21   CN01492218     93
22   CN01492297     93
23   CN01492145     93
24   CN01492142     93
25   CN01492147     93
26   CN01493007     93
27   CN01492221     93
28   CN01492374     93
29   CN01493377     93
30   CN01492713     93
31   CN01493010     93
32   CN01491970     93
33   CN01492556     93
34   CN01492822     93
35   CN01492044     93
36   CN01492841     93
37   CN01493280     93
38   CN01492175     93
39   CN01492782     93
40   CN01493015     93
41   CN01492214     93
42   CN01493098     89
43   CN01493026     89
44   CN01493290     84
45   CN01492618     80
46   CN01493014     77
47   CN01492848     76
48   CN01491931     68
49   CN01492513     60
50   CN01492910     49
51   CN01493260     33
52   CN01492277     25
53   CN01492229     17
54   CN01493053     13
55   CN01492672      9
[55 rows x 2 columns]

我想将client['Value']priority['Value']相乘,其中client['ConnectionID']==priority['ConnectionID'] 但是,如果在client['ConnectionID'] priority['ConnectionID']应该有一个条件,那么在这种情况下会忽略乘法。 其中的 output 存储在另一个 dataframe 中。 我尝试了以下方法,但没有奏效:

for i in range(len(client)):
   for j in range(len(priority)):
       if(client['ConnectionID'].loc[i]==priority['ConnectionID'].loc[j]):
           client['Multiplication'] = client['Value'].loc[i]*priority['Value'].loc[j]

有人知道如何以简单的方式做吗?

一种方法可能是:

priority = priority.assign(mul=(priority['ConnectionID']\
               .map(client.set_index('ConnectionID')\
                    ['Value'])*priority['Value']).fillna(priority['Value']))

print(priority)

    ConnectionID  Value    mul
1     CN01491920      2    2.0
3     CN01491922      2    2.0
5     CN01491931      1   68.0
7     CN01491928      2    2.0
9     CN01491935      2    2.0
589   CN01493318      1  616.0
591   CN01493288      1    1.0
593   CN01493307      1  211.0
595   CN01493322      2    2.0
597   CN01493321      2  186.0

所以,这里我主要使用了pandas的合并function。我希望这会有所帮助:

client.rename(columns={'value': 'client_val'}, inplace=True)
merged = priority.merge(client, how='left')
merged['multiplicated_value'] = merged['value'] * merged['client_val']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM