融化熊猫数据框

时间:2021-04-30 08:34:40

标签: pandas

我的熊猫 df 如下所示:

import pandas as pd
L1 = [['ID1', 0, 'key1a', 'value1a', 'pair1a'],
      ['ID1', 2, 'key1c', 'value1c', 'pair1c'],
      ['ID1', 1, 'key1b', 'value1b', 'pair1b'],
      ['ID2', 0, 'key2a', 'value2a', 'pair2a'],
      ['ID2', 1, 'key2b', 'value2b', 'pair2b'],
      ['ID2', 2, 'key2c', 'value2c', 'pair2c']
      ]

df1 = pd.DataFrame(L1,columns=['ID', 't', 'Key','Value', 'Pair'])

是否可以将其转换为类似于以下两个选项的任何内容。它看起来像转置。但是,转置没有帮助。

预期输出:

df1=

ID1 key1a key1b key1c value1a value1b value1c  pair1a pair1b pair1c
ID2 key2a key2b key2c value2a value2b value2c  pair2a pair2b pair2c

df1=

ID1 key1a value1a pair1a key1b value1b pair1b key1c value1c pair1c
ID2 key2a value2a pair2a key2b value2b pair2b key2c value2c pair2c

编辑: key1a, value1a 可以放在单独的列中吗?更好地处理生成的df?

2 个答案:

答案 0 :(得分:0)

尝试 public void setActiveScene(Scene newActiveScene) { stage.setScene(newActiveScene); stage.setWidth(newActiveScene.getRoot().minWidth(-1)); stage.setHeight(newActiveScene.getRoot().minHeight(-1)); } 然后将列中的列表拆分为多列

agg(list)
cols = ['Key','Value', 'Pair']

df_ = df1.sort_values('Key').groupby('ID')[cols].agg(list)

df_ = pd.concat([pd.DataFrame(df_[col].values.tolist(), index=df_.index) for col in cols], axis=1, ignore_index=True).reset_index()

答案 1 :(得分:0)

您可以通过以下步骤实现您的预​​期:

  • 根据 ID 上的 Keygroupby() 对 Dataframe 进行排序,并获取每列的值列表。
  • apply(pd.Series) 在每一列上使用列表推导
  • 使用 pd.concat()
  • 连接该列表中的所有 dfs
df1 = df1.sort_values(by=['Key']).groupby(df1.ID)["Key","Value","Pair"].agg(list)
dfs = [df1[c].apply(pd.Series) for c in df1.columns]
df = pd.concat(dfs, axis=1, ignore_index= True).reset_index()
print(df)


        ID      0      1      2        3        4        5       6       7       8
    0  ID1  key1a  key1b  key1c  value1a  value1b  value1c  pair1a  pair1b  pair1c
    1  ID2  key2a  key2b  key2c  value2a  value2b  value2c  pair2a  pair2b  pair2c