我的熊猫 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?
答案 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)
您可以通过以下步骤实现您的预期:
groupby()
对 Dataframe 进行排序,并获取每列的值列表。apply(pd.Series)
在每一列上使用列表推导pd.concat()
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