计算熊猫数据帧中 ID 的出现次数

时间:2021-06-15 15:49:57

标签: python pandas

我有几个数据框,每个都有几千行,看起来与此类似:

heifers_df

       id   y     ins               
200316157 123 2004121 
200316157 456 2004121 
200316157 789 2004121 
200519776 456 2007234 
200519776 789 2007234 
200812334 123 2010333 
200812334 789 2010333 
200812334 345 2010333 
200812334 567 2010333 

我想用python(pandas or numphy?)来统计每个ID的出现次数,总出现次数(T)每次出现次数(No) :

heifers_df

       id    y      ins  T  No          
200316157  123  2004121  3   1
200316157  456  2004121  3   2
200316157  789  2004121  3   3
200519776  456  2007234  2   1
200519776  789  2007234  2   2
200812334  123  2010333  4   1
200812334  789  2010333  4   2
200812334  345  2010333  4   3
200812334  567  2010333  4   4

我在 Fortran Counting frequency of variables in text data in Fortran 中得到了有关此问题的帮助 但现在我正在尝试在 python 中实现相同的功能。

基于 Fortran 代码和我对 Python 和 Pandas 的初学者知识,这是我尝试使用第一个数据框所做的:

i1 = 0
# set i0, i1
#  i0: line where specific user id starts
#  i1: line where specific user id ends
for i in range(len(heifers_df)) :
    i0 = i1 + 1
    same_id = True
    while same_id == True :
        heifers_df.loc[
            heifers_df["id"[i]] != heifers_df["id"[i0]],     #How do I reference each row within the column?
            same_id ] = False
    i1 = i
    heifers_df["T"] = i1-i0+1
    heifers_df["No"] = i-i0+1

但是当我运行这个时,我得到一个错误:

....  heifers_df["id"[i]] != heifers_df["id"[i0]],
     KeyError: 'i'

我这样做是不是走错方向了?

我曾尝试搜索类似的问题,我见过分组和计数操作,但我还没有看到将结果粘贴到问题中的 ID 并对每个 ID 进行计数的操作。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

IIUC,如果所有唯一 id 都可以排序到连续的块中。

df['T'] = df.groupby('id')['id'].transform('count')
df['No'] = df.groupby('id')['id'].cumcount() + 1
df

输出:

          id    y      ins  T  No
0  200316157  123  2004121  3   1
1  200316157  456  2004121  3   2
2  200316157  789  2004121  3   3
3  200519776  456  2007234  2   1
4  200519776  789  2007234  2   2
5  200812334  123  2010333  4   1
6  200812334  789  2010333  4   2
7  200812334  345  2010333  4   3
8  200812334  567  2010333  4   4