我有一个大约有60,000条记录的熊猫数据框,如下所示:
ID P1 YEAR
0 20184045 MK 2020
1 20184045 GF 2020
2 20184011 EC 2020
3 20184011 MK 2020
4 20184011 EC 2020
5 20180673 GF 2020
其中ID是记录的ID(8位整数),它具有P1属性,该属性可以采用10个不同的值(所有均为2个字符的字符串),年份在1995年至2020年之间。每个ID可以包含以下记录:具有1到5个不同的年份值。我想获得2个其他数据框:一个可以为我提供有关每年P1的不同值数量和每个ID的信息,如下所示:
ID YEAR NUMBER OF DISTINCT VALUES OF P1 FOR EACH YEAR
0 20184045 2020 n
1 20184045 2019
2 20184045 2018
3 20184045 2017
4 20184011 2020
5 20180673 2020
我的第二个数据帧将计算每个ID的P1不同值的总数。
ID NUMBER OF DISTINCT VALUES OF P1 OVERALL
0 123 n1
1 456 n2
2 789 n3
3 987 n4
4 654 n1
5 321 n2
[我尝试查找如何使用iterrows()和iteritems()遍历一个数据框,但是我无法找到如何同时遍历3列并按ID分组的方法。
[我也研究过itertuples(),它产生了namedtuples,并且看起来更有希望,但是我一直找不到令人满意的解决方案。
您可以用两个groupby来做:
df1 = (df.groupby(['ID','YEAR'])['P1']
.nunique()
.reset_index(name='Number of Unique P1')
)
df2 = (df.groupby('YEAR')['P1']
.nunique()
.reset_index(name='Number of Unique P1')
)