熊猫如何添加基于行的逗号分隔值?

时间:2020-05-15 09:34:04

标签: python pandas

我有以下熊猫DataFrame:-

import pandas as pd
df = pd.DataFrame({
    'code': ['eq150', 'eq150', 'eq152', 'eq151', 'eq151', 'eq150'],
    'reg': ['A', 'C', 'H', 'P', 'I', 'G'],
    'month': ['1', '2', '4', '2', '1', '1']
})
df

    code   reg  month
0   eq150   A    1
1   eq150   C    2
2   eq152   H    4
3   eq151   P    2
4   eq151   I    1
5   eq150   G    1

预期输出:-

         1         2       3       4
eq150   A, G       C    
eq152                              H
eq151    I         P

2 个答案:

答案 0 :(得分:1)

如果您希望输出也包括空的3列:

all_cols = list(map(
    str,
    list(range(
        df.month.astype(int).min(),
        df.month.astype(int).max()+1
    ))
))

df_cols = list(df.month.unique())
add_cols = list(set(all_cols)-set(df_cols))

df = df.pivot_table(
    index='code',
    columns='month',
    aggfunc=','.join
).reg.rename_axis(None).rename_axis(None, axis=1).fillna('')

for col in add_cols: df[col] = ''

df = df[all_cols]

df
        1   2   3   4
eq150   A,G C       
eq151   I   P       
eq152               H

答案 1 :(得分:0)

pivot_tableDataFrame.reindex配合使用来增加缺少的月份:

df['month'] = df['month'].astype(int)
r = range(df['month'].min(), df['month'].max() + 1)

df1 = (df.pivot_table(index='code', 
                      columns='month', 
                      values='reg', 
                      aggfunc=','.join,
                      fill_value='')
          .reindex(r, fill_value='', axis=1))
print (df1)
month    1  2 3  4
code              
eq150  A,G  C     
eq151    I  P     
eq152            H