python - 对包含重复项的列进行分组,但同时保留重复信息

标签 python pandas

我有以下数据框:

 df=pd.DataFrame({'id':['A','A','B','C','D'],'Name':['apple','apricot','banana','orange','citrus'], 'count':[2,3,6,5,12]})

   id     Name  count
 0  A    apple      2
 1  A  apricot      3
 2  B   banana      6
 3  C   orange      5
 4  D   citrus     12

我试图按“id”列对数据框进行分组,但也将重复的名称保留为单独的列。以下是预期输出:

    id   sum(count)  id1      id2
 0  A    5           apple    apricot
 1  B    6           banana   na
 2  C    5           orange   na
 3  D    12          citrus   na

我尝试使用以下语句按 id 列进行分组,但这完全删除了 name 列。

df.groupby(['id'], as_index=False).sum() 

如果有任何建议/帮助,我将不胜感激。

最佳答案

您可以使用DataFrame.pivot_table为此:

g = df.groupby('id')
# Generate the new columns of the pivoted dataframe
col = g.Name.cumcount()
# Sum of count grouped by id
sum_count = g['count'].sum()

(df.pivot_table(values='Name', index='id', columns = col, aggfunc='first')
   .add_prefix('id')
   .assign(sum_count = sum_count))

      id0     id1       sum_count
id                            
A    apple  apricot          5
B   banana      NaN          6
C   orange      NaN          5
D   citrus      NaN         12

关于python - 对包含重复项的列进行分组,但同时保留重复信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54753710/

相关文章:

Pandas Series 应用函数返回多行并向索引添加第二级

python - 如何销毁 Python 对象并释放内存

python - 使用 Wikipedia 上的 BeautifulSoup 进行网页抓取

python - Spyder 中的 "RuntimeError: asyncio.run() cannot be called from a running event loop"

python - 通过引用另一个数据帧提取具有上限的行

pandas - 从 python 中的 sas 数据集中的 x 行读取 n 行

Python argpartsort 性能瓶颈

python - WTForms 在下拉列表中显示外键字段的名称

python - 使用 Python 添加/删除 Ubuntu 登录脚本项

python - (Python) 使用 sklearn 类中的 DictVectoriser 和字符串