首页 > 解决方案 > 使用不同的字符串重复脚本 - 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())

但不幸的是,它提取的原始数据发生了相当大的变化,因此代码需要足够动态,才能被国家名称引用。

任何帮助表示赞赏!

标签: pythonpandasdataframetime-series

解决方案


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

推荐阅读