【问题标题】:Concatenate columns with same id Pandas DataFrame连接具有相同 ID Pandas DataFrame 的列
【发布时间】:2018-12-26 09:33:21
【问题描述】:

我有一个名为 weather 的 DataFrame,其结构如下:

    STATION     DATE        ELEM    VALUE
0   US1MNCV0008 20170101    PRCP    0
1   US1MNCV0008 20170101    SNOW    0
2   US1MISW0005 20170101    PRCP    0
3   US1MISW0005 20170101    SNOW    0
4   US1MISW0005 20170101    SNWD    0

我想使用日期和电台组合行以获得以下内容:

    STATION     DATE        ELEM  VALUE ELEM  VALUE ELEM VALUE
0   US1MNCV0008 20170101    PRCP  0     SNOW  0
1   US1MISW0005 20170101    PRCP  0     SNOW  0     SNWD    0

我正在尝试通过使用:

weather.groupby(['station', as_index=False).agg(lambda x: x.tolist())

但这会创建列表,这不是我想要的。如何进行聚合?

【问题讨论】:

    标签: python pandas dataframe data-structures jupyter-notebook


    【解决方案1】:

    你可以使用:

    df = (df.set_index(['STATION','DATE', df.groupby(['STATION','DATE']).cumcount()])
            .unstack()
            .sort_index(axis=1, level=1))
    df.columns = ['{}_{}'.format(i, j) for i, j in df.columns]
    df = df.reset_index()
    print (df)
           STATION      DATE ELEM_0  VALUE_0 ELEM_1  VALUE_1 ELEM_2  VALUE_2
    0  US1MISW0005  20170101   PRCP      0.0   SNOW      0.0   SNWD      0.0
    1  US1MNCV0008  20170101   PRCP      0.0   SNOW      0.0    NaN      NaN
    

    解释

    1. 通过STATIONDATEcumcount 获取每个组的计数
    2. set_index 创建MultiIndex
    3. unstack重塑
    4. 在列中展平MultiIndex
    5. index 转换为reset_index 的列

    或者使用GroupBy.apply为每个组创建DaatFrame,最后解决方法同上:

    df = (df.groupby(['STATION','DATE'])['ELEM','VALUE']
           .apply(lambda x: pd.DataFrame(x.values, columns=x.columns))
           .unstack()
           .sort_index(axis=1, level=1))
    df.columns = ['{}_{}'.format(i, j) for i, j in df.columns]
    df = df.reset_index()
    print (df)
           STATION      DATE ELEM_0 VALUE_0 ELEM_1 VALUE_1 ELEM_2 VALUE_2
    0  US1MISW0005  20170101   PRCP       0   SNOW       0   SNWD       0
    1  US1MNCV0008  20170101   PRCP       0   SNOW       0    NaN     NaN
    

    【讨论】:

      猜你喜欢
      • 2021-11-02
      • 2022-12-14
      • 2014-01-18
      • 2022-01-26
      • 2014-09-28
      • 2018-05-31
      • 2013-11-09
      • 2022-11-20
      • 2020-12-23
      相关资源
      最近更新 更多