如何按某些列分组并在 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
所以我有一个数据框,其相同 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