作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 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
但是您可以通过选择Series
在unstack
之前指定列来避免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/
我是一名优秀的程序员,十分优秀!