pandas - 根据索引设置 Multiindex 列的值
问题描述
这是我的多索引数据框:
A B C D E F G H I J
Chars Date
2020 January 4.0 66 45 26 99 20 13.5 15 3.8 3.2
2020 February 4.0 66 45 26 99 20 13.5 15 3.8 3.2
2020 March 4.0 66 45 26 99 20 13.5 15 3.8 3.2
2020 April 4.0 66 45 26 99 20 13.5 15 3.8 3.2
Chars2 2020 January 4.0 66 45 26 99 20 13.5 15 3.8 3.2
2020 February 4.0 66 45 26 99 20 13.5 15 3.8 3.2
2020 March 4.0 66 45 26 99 20 13.5 15 3.8 3.2
2020 April 4.0 66 45 26 99 20 13.5 15 3.8 3.2
例如,我想在 3 月和 3 月之后进行更改,但只更改“B”列。我怎样才能做到这一点?
我努力了:
df.xs('Chars2')[df['B'].index.get_level_values(1).month >= 3] = 20.40
我收到了这个错误:
AttributeError: 'Index' object has no attribute 'month'
然后,我尝试了这样的事情。但我无法达到我想要的输出。
df.loc[pd.IndexSlice['B', pd.to_datetime(df.index.get_level_values(1), errors = 'coerce').month >= 3] = 20.40
我的预期输出:
A B C D E F G H I J
Chars Date
2020 January 4.0 66 45 26 99 20 13.5 15 3.8 3.2
2020 February 4.0 66 45 26 99 20 13.5 15 3.8 3.2
2020 March 4.0 66 45 26 99 20 13.5 15 3.8 3.2
2020 April 4.0 66 45 26 99 20 13.5 15 3.8 3.2
Chars2 2020 January 4.0 66 45 26 99 20 13.5 15 3.8 3.2
2020 February 4.0 66 45 26 99 20 13.5 15 3.8 3.2
2020 March 4.0 20.4 45 26 99 20 13.5 15 3.8 3.2
2020 April 4.0 20.4 45 26 99 20 13.5 15 3.8 3.2
解决方案
创建 2 个掩码,将它们按&
位与链接,然后设置值B
:
m1 = pd.to_datetime(df.index.get_level_values(1), errors = 'coerce').month >= 3
m2 = df.index.get_level_values(0) == 'Chars2'
df.loc[m1 & m2, 'B'] = 20.54
print (df)
A B C D E F G H I J
Ch Date
Chars 2020 January 4.0 66.00 45 26 99 20 13.5 15 3.8 3.2
2020 February 4.0 66.00 45 26 99 20 13.5 15 3.8 3.2
2020 March 4.0 66.00 45 26 99 20 13.5 15 3.8 3.2
2020 April 4.0 66.00 45 26 99 20 13.5 15 3.8 3.2
Chars2 2020 January 4.0 66.00 45 26 99 20 13.5 15 3.8 3.2
2020 February 4.0 66.00 45 26 99 20 13.5 15 3.8 3.2
2020 March 4.0 20.54 45 26 99 20 13.5 15 3.8 3.2
2020 April 4.0 20.54 45 26 99 20 13.5 15 3.8 3.2
推荐阅读
- python - 如何比较两个数据框中的两列(一列包含另一列)
- php - Laravel 刀片路线在标题上显示方法
- asynchronous - NServiceBus 的自定义日志实现与 AsyncLocal 抛出异常
- javascript - php中的Morris.js条形图?
- amazon-web-services - 是否有用于轮换 AWS RDS 证书的文档?
- matplotlib - matplotlib:如何从直方图条中获取颜色(或 facecolor)?
- c# - 提供具有复杂设置配置的 Azure Web 应用
- ansible - no_device:是的,在使用 Ansible 创建 ami 时不起作用
- ruby-on-rails - 自动化生产页面创建
- c++ - QObject::connect: 需要括号,信号 QSerialPort::readyRead in ..\voltage_sensor\dialop.cpp:41