我有一个包含两列的数据框 - 名称和编号。我想根据数字列对所有名称进行分组,然后以表格格式打印数据,其中所有名称都带有数字1,旁边是数字2的名称,依此类推。 例如, 如果输入是:
name = ['Bob','David','Jane','Mike','Josh','Emily']
number = [1,2,3,1,2,1]
df = pd.DataFrame([name,number]).T
df.columns = ['name','number']
期望的输出(但希望看起来好多了):
num1 num2 num3
Bob David Jane
Mike Josh
Emily
答案 0 :(得分:3)
选项1
使用defaultdict
from collections import defaultdict
d = defaultdict(list)
f = 'num{}'.format
for nm, nb in zip(df.name, df.number):
d[f(nb)].append(nm)
pd.DataFrame.from_dict(d, orient='index').T.fillna('')
num1 num2 num3
0 Bob David Jane
1 Mike Josh
2 Emily
选项2
i = df.groupby('number').cumcount().values
j, c = pd.factorize(df.number.values)
a = np.empty((i.max() + 1, c.size), dtype='<U32')
a.fill('')
a[i, j] = df.name.values
pd.DataFrame(a, columns=c).add_prefix('num')
num1 num2 num3
0 Bob David Jane
1 Mike Josh
2 Emily
答案 1 :(得分:2)
致电DF_KEY
,在groupby
上分组,转换为字典,然后重新创建数据框。
number
答案 2 :(得分:1)