【问题标题】:How to merge MultiIndex Dataframes with weights in Python Pandas?如何在 Python Pandas 中将 MultiIndex 数据框与权重合并?
【发布时间】:2019-09-04 13:01:39
【问题描述】:

我有 3 个多索引数据帧,其结构如下:

     Dataframe1:

     Date      IDs     Values
     Date1     ID4     0.5
               ID5     2.3
               ID6     3.1
     Date2     ID1     1.2
               ID4     5.1
     ...


     Dataframe2:

     Date      IDs     Values
     Date1     ID1     2.5
               ID2     3.3
               ID4     4.1
     Date2     ID3     5.2
               ID4     1.1
     ...

same for dataframe3

日期和 ID 在每个实例化中大部分都是重复的,但可能有一些没有完全对齐。

我需要将所有 3 个合并到一个具有相同结构的数据帧中,但每个 id/date 匹配对都加上权重(因此是加权平均值)。

是否有一个简单的数据帧命令来执行此操作?

【问题讨论】:

  • 这里的加权平均值是怎么计算的?我没有看到任何重量。你的意思是简单地取平均值?

标签: python pandas dataframe merge multi-index


【解决方案1】:

如果我理解正确,我们可以执行以下操作。

首先使用pandas.concatenate 将数据帧连接到一个数据帧,同时我们使用DataFrame.reset_index 重置索引。

然后我们在Date & IDs 列上使用Dataframe.groupby 并取Valuesmean

df_all = pd.concat([df1.reset_index(), df2.reset_index()])

df_all = df_all.groupby(['Date', 'IDs'], as_index=False)['Values'].mean()

产量:

print(df_all)
    Date  IDs  Values
0  Date1  ID1     2.5
1  Date1  ID2     3.3
2  Date1  ID4     2.3
3  Date1  ID5     2.3
4  Date1  ID6     3.1
5  Date2  ID1     1.2
6  Date2  ID3     5.2
7  Date2  ID4     3.1

【讨论】:

  • 太好了,这似乎工作得很好。在第一个连接中,是否所有单独的 ID 值都保留在连接的数据框中,而不对它们执行任何操作?最后,如果我确实想放置除等权重之外的任何东西,有没有办法使用 group-by 函数,还是会变得更复杂?假设权重为 (0.1, 0.4, 0.5)。谢谢!
  • 完美,很高兴能帮上忙。是的,第一行将保留所有行。因此,您可以执行加权平均,但这会使问题有所不同。我会为此发布一个新问题。提示,你必须使用np.average 来表示@SingularityFuture
猜你喜欢
  • 2016-04-01
  • 2020-11-30
  • 2021-12-14
  • 2018-01-31
  • 2023-01-04
  • 2019-08-30
  • 2021-09-16
  • 2018-07-22
  • 2017-03-27
相关资源
最近更新 更多