python - 使用不同的字符串重复脚本 - Python
问题描述
我有一个包含多个国家的数据框;
Date Qatar Norway . . .
01/01/2004 43 33
.
.
.
31/12/2021 32 32 . . .
我需要每一列都是它自己的数据框和一个数据透视表,这很好,我正在使用以下内容;
Qatar = df[['Date', 'Qatar']]
Qatar['Date']= pd.to_datetime(Qatar['Date'])
Qatar = Qatar.groupby([Qatar.Date.dt.year,Qatar.Date.dt.month]).mean()
Qatar = Qatar.unstack()
Qatar = Qatar/1745
Qatar = Qatar.round()
Cell('Exports_Country','D3').df = Qatar
我有 40 多个国家/地区,有没有办法在不手动执行的情况下为国家列表编写以上内容?
我试过这个;
df1 = pd.melt(df, 'Date', var_name='country', value_name='val')
df1['Date']= pd.to_datetime(df1['Date'])
df2 = (df1.groupby(['country', df1.Date.dt.year,df1.Date.dt.month])['val']
.mean()
.unstack()
.div(1745)
.round())
但不幸的是,它提取的原始数据发生了相当大的变化,因此代码需要足够动态,才能被国家名称引用。
任何帮助表示赞赏!
解决方案
Series.unstack
一级和三级使用:
df1 = pd.melt(df, 'Date', var_name='country', value_name='val')
df1['Date']= pd.to_datetime(df1['Date'])
df2 = (df1.groupby(['country', df1.Date.dt.year,df1.Date.dt.month])['val']
.mean()
.unstack([0,2])
.div(1745)
.round())
print (df2)
country Norway Qatar
Date 1 12 1 12
Date
2004 0.0 NaN 0.0 NaN
2021 NaN 0.0 NaN 0.0
所以可能按名称选择列:
Qatar = df2[['Qatar']]
print (Qatar)
country Qatar
Date 1 12
Date
2004 0.0 NaN
2021 NaN 0.0
推荐阅读
- java - @Transient 在 Spring 数据 jpa 中的自定义查询
- reactjs - 使用库反应组件的打字稿错误:TS2769
- python-3.8 - Python3 多处理池类卡在 join() 方法中
- vba - VBA PowerPoint - 如何选择特定幻灯片或按部分选择并导出到 MP4?
- angular - 将 Observable 中的值分配给 Angular 中的接口
- c++ - 在循环中打印出值,打印出的值不超过一定数量
- node.js - sequelize 是否在数据库中创建约束?
- c++ - 私有继承和虚函数
- python - KeyError:“['....'] 不在索引中”
- css - 在 postcss & rollup 中创建单独的 CSS 文件