我想总结一些基于相同价格的市场交易量,比如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
同样,可能还有其他方法可以实现您想要的。