【问题标题】:Repeat script with different string - Python使用不同的字符串重复脚本 - Python
【发布时间】:2021-09-11 12:48:42
【问题描述】:

我有一个包含多个国家/地区的数据框;

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())

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

任何帮助表示赞赏!

【问题讨论】:

    标签: python pandas dataframe time-series


    【解决方案1】:

    在第一级和第三级使用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
    

    【讨论】:

      猜你喜欢
      • 2020-07-10
      • 2015-05-05
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多