gpt4 book ai didi

python - 更改多索引数据帧较低级别中的多个值

转载 作者:行者123 更新时间:2023-12-01 08:11:20 26 4
gpt4 key购买 nike

考虑以下 DataFrame:

import numpy as np
import pandas as pd

arrays = [['foo', 'foo', 'foo', 'bar', 'bar', 'bar'],
['A', 'B', 'C', 'A', 'B', 'C']]
tuples = list(zip(*arrays))
index_values = pd.MultiIndex.from_tuples(tuples)
df = pd.DataFrame(np.random.rand(6), index = index_values)

print(df)

0
foo A 0.726699
B 0.001700
C 0.936495
bar A 0.298490
B 0.167234
C 0.476725

假设我想使用以下值缩放 df:

df_scale = pd.DataFrame([0,1,4], index=['A','B','C'])
print(df_scale)

0
A 0
B 1
C 4

也就是说,我希望所有 A 乘以 0,所有 B 乘以 1,所有 C 乘以 4。

目前,我使用以下方法:

df_new = df.copy()
list_df_new_index = list(df_new.index)
for index in list_df_new_index:
cntr, prod = index
df_new.loc[cntr, prod] = df_new.loc[cntr, prod]*df_scale.loc[prod]
print(df_new)

0
foo A 0.000000
B 0.001700
C 3.745981
bar A 0.000000
B 0.167234
C 1.906900

虽然这有效,但我忍不住认为 pandas 中有一个功能可以让我做到这一点。

我浏览了 Select rows in pandas MultiIndex DataFrame 上的答案。

起初我以为我可以使用 df.xs(),但如果我理解正确的话,这只允许我选择而不是更改值。

接下来我研究了 pd.IndexSlice(),但我不知道如何使用它来更改多个值。

pandas 是否提供在 MultiIndex DataFrame 的较低级别中更改多个值的功能?

最佳答案

您可以乘以 DataFrame.mul :

df = df.mul(df_scale, level=1, axis=0)
#if want multiple by column 0
#df = df.mul(df_scale[0], level=1, axis=0)
print (df)
0
foo A 0.000000
B 0.393081
C 2.495880
bar A 0.000000
B 0.880499
C 1.196688

关于python - 更改多索引数据帧较低级别中的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55235956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com