打印表与不同数量的企业

时间:2017-10-18 06:05:16

标签: python pandas dataframe

我有一个包含两列的数据框 - 名称和编号。我想根据数字列对所有名称进行分组,然后以表格格式打印数据,其中所有名称都带有数字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                  

3 个答案:

答案 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)

set_indexcumcountunstack一起使用:

df1 = (df.set_index([df.groupby('number').cumcount(),'number'])['name']
        .unstack(fill_value='')
        .add_prefix('num')
        .rename_axis(None, 1))
print (df1)
    num1   num2  num3
0    Bob  David  Jane
1   Mike   Josh      
2  Emily   

替代Series的{​​{1}}:

list