gpt4 book ai didi

python - 如何对pandas多索引中的列进行操作

转载 作者:行者123 更新时间:2023-11-30 21:53:00 25 4
gpt4 key购买 nike

在 pandas 数据框中,我想添加一个 var3 列,它是整数和 var1 列中的最小值。但是,该列是我使用 unstack() 创建的多重索引的一部分。

单独地,我可以使用 df_wide['value']['var1'] 调用列 var1。但是,我无法执行 np.min() 操作并生成新列 var3

有没有办法可以去掉所有这些嵌套索引,使 pandas 更像 R?

import pandas as pd
import numpy as np

df= pd.DataFrame()
month = np.arange(1, 13)
np.random.seed(42)
values1 = np.random.randint(0, 100, 12)
values2 = np.random.randint(200, 300, 12)

df['month'] = np.hstack((month, month))
df['variable'] = np.hstack((np.repeat('var1', 12), np.repeat('var2', 12)))
df['value'] = np.hstack((values1, values2))
df['year'] = 2020

print(df.head())

df.set_index(['year', 'month', 'variable'], inplace=True)
df_wide = df.unstack().reset_index()

print(df_wide.head())

df_wide['var3'] = np.min(25, df_wide['var1'])

产生以下错误:TypeError:“Series”对象无法解释为整数

最佳答案

使用numpy.minimum对于 MulitIndex 中的选择列,可以使用 DataFrame.xs :

df_wide['var3'] = np.minimum(25, df_wide.xs('var1', axis=1, level=1))
print(df_wide.head())
year month value var3
variable var1 var2
0 2020 1 51 223 25
1 2020 2 92 202 25
2 2020 3 14 221 14
3 2020 4 71 252 25
4 2020 5 60 201 25

但是您可以通过选择Seriesunstack之前指定列来避免MulitIndex:

df_wide = df.set_index(['year', 'month', 'variable'])['value'].unstack().reset_index()

df_wide['var3'] = np.minimum(25, df_wide['var1'])

print(df_wide.head())
variable year month var1 var2 var3
0 2020 1 51 223 25
1 2020 2 92 202 25
2 2020 3 14 221 14
3 2020 4 71 252 25
4 2020 5 60 201 25

关于python - 如何对pandas多索引中的列进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59772638/

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