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)
我有一个数据框,其中包含项目的名称和值,如下所示,为期两周。第 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)