当前位置: 首页 > 知识库问答 >
问题:

使用pandas[重复]按组获取计数

仉宸
2023-03-14

我有一个熊猫数据框,其中包含如下所示的数据:

ID  year_month_id   Class
1   201612          A
2   201612          D
3   201612          B
4   201612          Other
5   201612          Other
6   201612          Other
7   201612          A
8   201612          Other
9   201612          A
1   201701          B

所以ID可以在特定月份的任何类下,下个月他的类可能会改变。现在我想做的是,为每个ID获取它在特定类别下的月数,以及它属于的最新类别。像下面这样:

ID  Class_A Class_B Class_D Other Latest_Class
1   2        3       4         0    B
2   12       0       0         0    D

如何在python中实现这一点。有人能帮我吗?另外,由于真实的数据集是巨大的,并且无法手动验证,我如何才能获得属于多个类的ID列表?

共有3个答案

芮意
2023-03-14

您可以通过groupbyvalue\u countsunstack-

g = df.groupby('ID')
i = g.Class.value_counts().unstack(fill_value=0)

要获取最后一个类,请使用Groupbylast-

j = g.Class.last()

连接以获得结果-

pd.concat([i, j], 1).rename(columns={'Class': 'LastClass'})

    A  B  D  Other LastClass
ID                          
1   1  1  0      0         B
2   0  0  1      0         D
3   0  1  0      0         B
4   0  0  0      1     Other
5   0  0  0      1     Other
6   0  0  0      1     Other
7   1  0  0      0         A
8   0  0  0      1     Other
9   1  0  0      0         A

要获得每行超过1个ID的列表,请使用suma掩码-

k = i.sum(axis=1)
k[k > 1]

ID
1    2
dtype: int64
娄飞鸾
2023-03-14

您可以通过Groupby获取计数,并通过聚合count,然后通过unstack重塑。最后添加带有drop_duplicates的新列:

df1 = df.groupby(['ID','Class'])['year_month_id'].count().unstack(fill_value=0)
df1['Latest_Class'] = df.drop_duplicates('ID', keep='last').set_index('ID')['Class']
print (df1)
Class  A  B  D  Other Latest_Class
ID                                
1      1  1  0      0            B
2      0  0  1      0            D
3      0  1  0      0            B
4      0  0  0      1        Other
5      0  0  0      1        Other
6      0  0  0      1        Other
7      1  0  0      0            A
8      0  0  0      1        Other
9      1  0  0      0            A
黄昊
2023-03-14

我们可以使用透视表和concat,即

ndf = df.pivot_table(index=['ID'],columns=['Class'],aggfunc='count',fill_value=0)\
    .xs('year_month_id', axis=1, drop_level=True)

ndf['latest'] = df.sort_values('ID').groupby('ID')['Class'].tail(1).values

Class  A  B  D  Other latest
ID                          
1      1  1  0      0      B
2      0  0  1      0      D
3      0  1  0      0      B
4      0  0  0      1  Other
5      0  0  0      1  Other
6      0  0  0      1  Other
7      1  0  0      0      A
8      0  0  0      1  Other
9      1  0  0      0      A
 类似资料:
  • 我有一个至少 600,00 行的 excel 文件(大小各不相同)。我想用熊猫获取特定列的所有重复项。 这是我到目前为止尝试过的: 然而,我得到的结果不是重复的,我不确定我可能做错了什么。有没有更有效的方法来解决这个问题?

  • 问题内容: 目标 我有一个Pandas数据框,如下所示,具有多个列,并希望获取列的总数。 数据框 -: 我的尝试 : 我试图使用和获得列的总和: 这将导致以下错误: 预期产量 我期望输出如下: 或者,我想编辑一个包含总数的新标题: 问题答案: 您应该使用: 然后与配合使用,在这种情况下,索引应设置为与需要求和的特定列相同: 因为如果传递标量,则将填充所有行的值: 另有两个解决方案,请参见以下应用程

  • 我有一个数据帧,并且我使用了从它到的几个列: 通过上面的方式,我几乎得到了我需要的表(数据帧)。缺少的是一个额外的列,该列包含每个组中的行数。换句话说,我有均值,但我也想知道有多少数字是用来得到这些均值的。例如,在第一组中有8个值,在第二组中有10个值,依此类推。

  • 我有一个Python Pandas数据帧。df有2列,我想按第二列对df进行排序。 我想按角度排序df(升序)。

  • 在将数组传递给java中的函数然后将其分配给新数组时,我得到了相同的旧数组。 当传递数组处理传递对该数组的引用时,为什么会这样?