【问题标题】:Pandas - how to save attributes into an array and preserve their values into new columnsPandas - 如何将属性保存到数组中并将它们的值保存到新列中
【发布时间】:2022-01-13 21:25:26
【问题描述】:

我有一个具有属性"key""name""value"的数据框。对于每个"key" 组,我希望将属性"name" 存储在一个数组中。"value"然后将每个名称的名称存储到它自己的名为"<name>_value" 的列中。例如:

  key    name    value
0   A  Patton        2
1   A  Arthur        2
2   B    Will        1
3   B  Patton        1

上面的数据框应该这样转换:

  key              name    Patton_value    Arthur_value    Will_value
0   A  [Patton, Arthur]               2               2          null
1   B    [Patton, Will]               1            null             1

到目前为止我尝试的是:

df.groupby('key').name.apply(list).reset_index()

但我不知道如何保留 "name" 的值并将它们保存为列。

【问题讨论】:

    标签: python pandas data-science aggregate


    【解决方案1】:

    您可以创建一个name_list 列并旋转数据框:

    df['name_list'] = df['key'].map(df.groupby('key')['name'].agg(tuple)) 
    out = df.pivot_table(values='value', index=['key','name_list'], columns='name').add_suffix('_value').reset_index().rename({'name_list':'name'}, axis=1)
    out['name'] = out['name'].apply(list)
    out.columns.name = None
    

    输出:

      key              name  Arthur_value  Patton_value  Will_value
    0   A  [Patton, Arthur]           2.0           2.0         NaN
    1   B    [Will, Patton]           NaN           1.0         1.0
    

    【讨论】:

      【解决方案2】:

      可能有更简洁的方法来做到这一点,但这是可行的:

      D = df.pivot(columns='name', index='key', values='value').reset_index().rename_axis(None, axis=1)
      D['name'] = D.apply(lambda x: df['name'][df['key'] == x['key']].values, axis=1).reset_index(drop=True)
      D = D[[D.columns[0], D.columns[-1], *D.columns[1:-1]]]
      D.columns = [*D.columns[:2], *D.columns[2:] + '_value']
      

      输出:

      >>> D
        key              name  Arthur_value  Patton_value  Will_value
      0   A  [Patton, Arthur]           2.0           2.0         NaN
      1   B    [Will, Patton]           NaN           1.0         1.0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-27
        • 1970-01-01
        相关资源
        最近更新 更多