pandas Python:表中相同的ID/数字具有不同的值,它们在一行中,不同的值附加到右侧

cyvaqqii  于 2023-02-11  发布在  Python
关注(0)|答案(2)|浏览(136)

我有一个Pandas Table,其中一些ID在几行上相同,但分配的值不同。如何才能得到一个ID在一行上只显示一次的结果,并将不同的值附加到多列中?
起点:
| 识别号|第1栏|
| - ------|- ------|
| 1个|蓝色|
| 1个|红色|
| 第二章|灰色|
| 三个|黄色|
| 四个|橙|
| 1个|粉红|
| 第二章|白色|
理想解决方案:
| 识别号|第1栏|第2栏|第3栏|
| - ------|- ------|- ------|- ------|
| 1个|蓝色|红色|粉红|
| 第二章|灰色|白色||
| 三个|黄色|||
| 四个|橙|||

2guxujil

2guxujil1#

您可以用矢量化的方式重新塑造 Dataframe :

>>> (df.assign(col=df.groupby('ID').cumcount().add(1))
       .set_index(['ID', 'col'])['Column 1']
       .unstack('col').add_prefix('Column ')
       .reset_index().rename_axis(columns=None))

   ID Column 1 Column 2 Column 3
0   1     blue      red     pink
1   2     gray    white      NaN
2   3   yellow      NaN      NaN
3   4   orange      NaN      NaN

使用pivot_table

>>> (df.pivot_table(index='ID', values='Column 1', aggfunc='first', fill_value='',
                   columns='Column ' + df.groupby('ID').cumcount().add(1).astype(str))
      .reset_index())

   ID Column 1 Column 2 Column 3
0   1     blue      red     pink
1   2     gray    white         
2   3   yellow                  
3   4   orange
du7egjpx

du7egjpx2#

按ID分组,然后计算唯一值

df.groupby("ID")["Column 1"].apply(lambda x: pd.Series(x.unique())).unstack()

相关问题