首页 > 解决方案 > 将数据框分组行保存到正好两行

问题描述

我有一个数据框,我想根据特定列对行进行分组。每组中的行数至少为 4,最多为 50。我想将组中的一列保存为两行。如果 groupsize 是偶数,让我们说2n,则n行在一行中,其余行在n第二行中。如果它是奇怪的,n+1and nor nand n+1will do。

例如,

import pandas as pd
from io import StringIO

data = """
id,name
1,A
1,B
1,C
1,D
2,E
2,F
2,ds
2,G
2, dsds
"""
df = pd.read_csv(StringIO(data))

我要分组id

df.groupby('id',sort=False)

然后得到一个像

    id  name
0   1   A B
1   1   C D
2   2   E F ds
3   2   G dsds

标签: pandasdataframepandas-groupbypython-3.8

解决方案


可能不是最有效的解决方案,但它有效:

import numpy as np

df = df.sort_values('id')
# next 3 lines: for each group find the separation
df['range_idx'] = range(0, df.shape[0])
df['mean_rank_group'] = df.groupby(['id'])['range_idx'].transform(np.mean)
df['separate_column'] = df['range_idx'] < df['mean_rank_group']

# groupby itself with the help of additional column
df.groupby(['id', 'separate_column'], as_index=False)['name'].agg(','.join).drop(
    columns='separate_column')

推荐阅读