我有一个熊猫数据框,其中包含如下所示的数据:
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列表?
您可以通过groupby
value\u counts
unstack
-
g = df.groupby('ID')
i = g.Class.value_counts().unstack(fill_value=0)
要获取最后一个类,请使用Groupby
last
-
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的列表,请使用sum
a掩码-
k = i.sum(axis=1)
k[k > 1]
ID
1 2
dtype: int64
您可以通过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
我们可以使用透视表和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(升序)。
我已经用python确定了我需要在excel文件中获取的行号;使用以下命令: i、 e.打印时,行号显示: 现在,我只是想知道如何使用行号;以获取不同的列值。所以,按行号获取列值。 例如,在下面的示例中: 如何使用行号;i、 e.假设,列“”,以获取“”值?