Pandas:vlookup 类型搜索以从多索引数据框中的多个列中获取相同 name/id 项的 average/mean 值

Pandas: vlookup type search to get average/mean values of same name/id items from multiple columns in a multi-index dataframe

我有一个数据框,其中包含项目的名称和值,如下所示,为期两周。第 1 周和第 2 周的某些项目名称不相同

week1        week2        
Name Value Name Value 
a     0.1    b  0.6
b     0.3    a  0.3
c     0.5    d  0.1
d     0.7    e  0.4 

我想要做的是创建一个 table,其中包含我最终列表中的所有名称和平均值,如下所示。另外,如果项目 d 不在第 2 周,那么平均值应该除以 1 而不是 2,类似于动态平均值

Name  Average_Value
a      avg from wk1 and 2
b      avg from wk1 and 2
c      avg from wk1 and 2
d          "
e          "

我正在考虑通过为 week1 和 week2 值创建两个数据框来使用外部连接来获得最终的 table 但不确定创建两个单独的数据框是否是一个不错的选择(这样做是因为不确定如果所有值都在同一数据框中,则可以执行连接)。有什么更好的方法来处理它?

可以在Value上按.stack() with level=0 for week1 / week2. Then group by Name using .groupby() and take the .mean()对0级列MultiIndex进行堆叠,如下:

(df.stack(level=0)
   .groupby('Name')['Value'].mean()
   .reset_index(name='Average_Value')
)

name分组,对组取mean,如果组中有2个值,则取2个值的平均值。如果只有 1 个值,则平均值将是该值本身。

结果:

  Name  Average_Value
0    a           0.20
1    b           0.45
2    c           0.50
3    d           0.40
4    e           0.40

输入设置

data = {('week1', 'Name'): ['a', 'b', 'c', 'd'],
        ('week1', 'Value'): [0.1, 0.3, 0.5, 0.7],
        ('week2', 'Name'): ['b', 'a', 'd', 'e'],
        ('week2', 'Value'): [0.6, 0.3, 0.1, 0.4]}

df = pd.DataFrame(data)