根据df2中的.eq()对df1中的值求和



我想总结一些基于相同价格的市场交易量,比如2017年的6个小时。

我有一个DataFrame, df1 (market_volumes),它包含某些区域的市场数量。然后我有另一个DataFrame df2 (mFRR_price),它包含一些市场价格。

df1
Date  NO1 Up  NO1 Down  NO2 Up  ...  DK1 Up  DK1 Down  DK2 Up  DK2 Down
35062  31-12-2020    54.0       0.0   214.0  ...    33.0       0.0    31.0       0.0
35063  31-12-2020     3.0       0.0   121.0  ...   125.0       0.0    21.0       0.0
35064  31-12-2020     0.0     -28.0     0.0  ...     0.0      -9.0     0.0       0.0
35065  31-12-2020     0.0     -83.0     0.0  ...     0.0       0.0     0.0       0.0
35066  31-12-2020     0.0     -80.0     0.0  ...     0.0     -55.0     0.0       0.0
35067  31-12-2020     0.0     -42.0     0.0  ...    79.0       0.0    23.0       0.0
df2
Date  NO1 Up  NO2 Up  NO3 Up  ...  SE4 Up  FI Up  DK1 Up  DK2 Up
35062  31-12-2020    47.4    47.4    27.2  ...    61.1   61.1    94.1    94.1
35063  31-12-2020    31.0    31.0    25.7  ...    58.0   35.3    89.4    89.4
35064  31-12-2020    24.8    24.8    24.8  ...    54.5   24.8    56.7    56.7
35065  31-12-2020    24.8    24.8    24.8  ...    51.2   28.0    52.4    52.4
35066  31-12-2020    24.6    24.6    24.6  ...    45.8   26.6    51.9    51.9
35067  31-12-2020    24.1    24.1    23.3  ...    24.1   24.1    78.7    78.7

现在,我想总结一下df1中的市场交易量,如果df2中某一行的值等于列"NO1 up "中的值。

。,我正在寻找一种方法来结束与一个新的DataFrame,这将导致:

df3
Date  NO1 Up  NO1 Down  NO2 Up  ...  DK1 Up  DK1 Down  DK2 Up  DK2 Down    SUM
35062  31-12-2020    54.0       0.0   214.0  ...    33.0       0.0    31.0       0.0    (54+214)
35063  31-12-2020     3.0       0.0   121.0  ...   125.0       0.0    21.0       0.0    (3+121)
35064  31-12-2020     0.0     -28.0     0.0  ...     0.0      -9.0     0.0       0.0    etc.
35065  31-12-2020     0.0     -83.0     0.0  ...     0.0       0.0     0.0       0.0
35066  31-12-2020     0.0     -80.0     0.0  ...     0.0     -55.0     0.0       0.0
35067  31-12-2020     0.0     -42.0     0.0  ...    79.0       0.0    23.0       0.0

…因为它定位相等的区域价格,并在DataFrame中对这些位置的市场交易量求和。

我一直在做这个:

market_volumes['sum'] = mFRR_price.eq(mFRR_price['NO1 Up'], axis=0).mul(mFRR_price['NO1 Up'], axis=0).sum(axis=1)

但是它把df2中的值加起来放到df1中。我需要的位置在df2,但从df1的值。

import pandas as pd
df3['SUM'] = df3['NO1 Up'] + df3['NO2 Up']

您可以使用。loc并应用布尔索引。

df1.loc[df2['NO1 Up'] == df2['NO2 Up'], 'SUM'] = df1['NO1 Up'] + df1['NO2 Up']
df1.loc[df2['NO1 Up'] != df2['NO2 Up'], 'SUM'] = 0

第一行沿着df2的索引,检查列NO1 Up和NO2 Up中的值是否相等。然后它创建一个名为"SUM"的列-这个新列的值取决于前面的布尔值的结果。如果前面的布尔值为真,则转到SUM列并执行以下操作:

= df1['NO1 Up'] + df1['NO2 Up']

相反,如果结果为false,则pandas将在SUM列中插入'NaN'。

不确定您是否可以使用NaN值。大多数都不是,所以第二行代码或多或少与第一行相反……如果df2['NO1 Up'] != df2['NO2 Up'],则在df1 SUM列中插入整数0

同样,可能还有其他方法可以实现您想要的。