如何按某些列分组并在 Python 中反转分组依据

How to group by certain columns and invert the group by in Python

所以我有一个数据框,其相同 ID 包含多个自定义字段。我找到了 但这不是我要找的。在下面创建所需的入门数据框的代码

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()

基本上下图就是我要找的:

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

使用带前缀的枢轴,即

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