基于df2中的.eq()对df1中的值求和

2024-10-01 07:15:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想总结一下2017年6小时内基于同等价格的一些市场容量

我有一个数据框架,df1(market_volumes),它包含一些地区的市场容量。然后我有另一个数据帧,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

现在,如果df2中一行中的值等于“NO1 up”列中的值,我想总结df1中的市场容量

也就是说,我正在寻找一种方法,以一个新的数据帧结束,这将导致:

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

。。。因为它定位的区域价格相等,并且在数据帧中对这些位置的市场容量求和

我一直在做这个:

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中的值


Tags: 数据date市场价格pricedown容量df1
2条回答
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”的列—此新列的值取决于前面布尔值的结果。。如果前面的布尔值为true,则转到SUM列并执行以下操作:

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

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

不确定您是否同意NaN值。大多数不是,所以第二行代码或多或少是第一行代码的倒数。。。如果df2['NO1 Up']!=df2['NO2 Up'],然后在df1 SUM列中插入整数0

同样,可能还有其他方法来实现你想要的

相关问题 更多 >