如何按特定列分组并在Python中反转组

时间:2017-10-08 04:41:49

标签: python-3.x pandas dataframe pandas-groupby

所以我有一个数据框,其中有相同的ID包含多个自定义字段。我找到了this question,但这并不是我想要的。用于在

下创建所需起始数据框的代码
df = pd.DataFrame()
df['ID'] = [np.random.randint(1,2000) for x in range(0,1000)]
new = pd.DataFrame()
for x in range(0,10):
    new = new.append(df)
new = new.sort_values('ID').reset_index(drop=True)
new['Custom Field'] = [np.random.randint(1,20) for x in new['ID']]
new['Value'] = [np.random.randint(0,10000000) for x in new['ID']]
new = new.groupby(['ID','Custom Field']).first().reset_index()
new = new.sort_values(['ID','Custom Field']).reset_index(drop=True)
new.head()

enter image description here

基本上下图是我要找的: enter image description here

此图像显示它正在获取自定义字段表中的值并将它们转换为单独的列。对于每个ID,自定义字段表中最多可包含20个值。我需要将每个自定义字段值(1-20)放在它们自己的列中。如果某个ID没有该值,则该值为空。我想尽可能具体,但很难解释。如果我需要编辑问题以提供更多详细信息,请与我们联系。

1 个答案:

答案 0 :(得分:2)

使用带有添加前缀的枢轴,即

df.pivot('ID','Custom_Field','Value').add_prefix('CF')
Custom_Field        CF1        CF2        CF3        CF7        CF8  \
ID                                                                    
1                   NaN  5643962.0  6959658.0  4310939.0  5796051.0   
2             1121049.0  6044077.0        NaN        NaN        NaN   

Custom_Field        CF9       CF12       CF13       CF15       CF16       CF19  
ID                                                                              
1             1198701.0        NaN  2925189.0  8438978.0  1730570.0  3481493.0  
2             4483108.0  3327149.0        NaN  2700632.0        NaN  3249005.0