我有一个大约有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(),它产生了命名元组,并且看起来更有希望,但是我一直找不到令人满意的解决方案。
答案 0 :(得分:0)
您可以使用两个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')
)