如何使用groupby创建新表并删除重复项

2024-09-29 17:47:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个新的数据集,但重新排列数据时遇到了问题。 我当前的数据集如下图所示。你知道吗

id        result 
309209    Successful 
309241    Successful 
309241    Not Successful 
309241    Not Successful 
309241    Not Successful

我想将“Successful”和“notsuccessful”分开,并按ID对每个实例进行计数,ID应该改成下面这样。你知道吗

id       success  fail total
309209   1        0    1
309241   1        3    4

我试过了删除重复项或者groupby来整理数据和计算实例,但是我总是得到错误的结果。谁来帮帮我!提前谢谢。你知道吗


Tags: 数据实例id错误notresult整理total
2条回答

df

    id       result
0   309209  Successful
1   309241  Successful
2   309241  Not Successful
3   309241  Not Successful
4   309241  Not Successful

使用^{}^{}

df1 = df.join(pd.get_dummies(df.result,columns='result')).groupby('id').sum().reset_index()
df1['total'] = df1[df1.columns[1:]].sum(axis=1)
print(df1)

    id      Not Successful  Successful  total
0   309209  0               1           1
1   309241  3               1           4

^{}margins一起使用,并按^{}删除最后一行:

df1 = (pd.crosstab(df['id'], df['result'], margins=True, margins_name='total')
         .iloc[:-1]
         .reset_index()
         .rename_axis(None, axis=1)
         .rename(columns={'Not Successful':'fail','Successful':'success'}))
print (df1)

       id  fail  success  total
0  309209     0        1      1
1  309241     3        1      4

另一种解决方案是^{}^{}用于重塑,而^{}用于新列total

df1 = (df.groupby(['id','result'])
         .size()
         .unstack(fill_value=0)
         .assign(total = lambda x: x.sum(axis=1))
         .reset_index()
         .rename_axis(None, axis=1)
         .rename(columns={'Not Successful':'fail','Successful':'success'}))

相关问题 更多 >

    热门问题