pandas - 将数据框分组行保存到正好两行
问题描述
我有一个数据框,我想根据特定列对行进行分组。每组中的行数至少为 4,最多为 50。我想将组中的一列保存为两行。如果 groupsize 是偶数,让我们说2n
,则n
行在一行中,其余行在n
第二行中。如果它是奇怪的,n+1
and n
or n
and n+1
will 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
解决方案
可能不是最有效的解决方案,但它有效:
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')