Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧的唯一元素的累积数量_Python_Pandas_Unique - Fatal编程技术网

Python 数据帧的唯一元素的累积数量

Python 数据帧的唯一元素的累积数量,python,pandas,unique,Python,Pandas,Unique,我有一个熊猫数据框 id tag 1 A 1 A 1 B 1 C 1 A 2 B 2 C 2 B 我想添加一列,计算id级别上唯一标记的累积数量。更具体地说,我想 id tag count 1 A 1 1 A 1 1 B 2 1 C 3 1 A 3 2 B 1 2 C 2 2 B 2 对于给定的id,计数将是非递减的。谢谢你的帮助 我想这正是你想要的: unique_count = df.drop_duplicates()

我有一个熊猫数据框

id tag
1  A
1  A
1  B
1  C
1  A
2  B
2  C  
2  B 
我想添加一列,计算id级别上唯一标记的累积数量。更具体地说,我想

id tag count
1  A   1
1  A   1
1  B   2
1  C   3
1  A   3
2  B   1
2  C   2
2  B   2

对于给定的id,计数将是非递减的。谢谢你的帮助

我想这正是你想要的:

unique_count = df.drop_duplicates().groupby('id').cumcount() + 1
unique_count.reindex(df.index).ffill()
+1
是因为计数从零开始。这仅在数据帧按
id
排序时有效。这是有意的吗?你可以事先分类

这个怎么样:

d['X'] = 1
d.groupby("Col").X.cumsum()

您可以在R和Python中找到其他一些方法


请参阅我的编辑。只有按
id
idt=[1,1,1,1,1,2,2,2]
tag=['A','A','B','C','A','B','C','B']
df=pd.DataFrame(tag,index=idt,columns=['tag'])
df=df.reset_index()
print(df)

   index tag
0      1   A
1      1   A
2      1   B
3      1   C
4      1   A
5      2   B
6      2   C
7      2   B


df['uCnt']=df.groupby(['index','tag']).cumcount()+1
print(df)

   index tag  uCnt
0      1   A     1
1      1   A     2
2      1   B     1
3      1   C     1
4      1   A     3
5      2   B     1
6      2   C     1
7      2   B     2


df['uCnt']=df['uCnt']//df['uCnt']**2
print(df)

   index tag  uCnt
0      1   A     1
1      1   A     0
2      1   B     1
3      1   C     1
4      1   A     0
5      2   B     1
6      2   C     1
7      2   B     0

df['uCnt']=df.groupby(['index'])['uCnt'].cumsum()
print(df)

   index tag  uCnt
0      1   A     1
1      1   A     1
2      1   B     2
3      1   C     3
4      1   A     3
5      2   B     1
6      2   C     2
7      2   B     2

df=df.set_index('index')
print(df)
      tag  uCnt
index          
1       A     1
1       A     1
1       B     2
1       C     3
1       A     3
2       B     1
2       C     2
2       B     2
df = pd.DataFrame({'id':[1,1,1,1,1,2,2,2],'tag':["A","A", "B","C","A","B","C","B"]})

df['count']=df.groupby('id')['tag'].apply(lambda x: (~pd.Series(x).duplicated()).cumsum())

   id tag  count
0   1   A      1
1   1   A      1
2   1   B      2
3   1   C      3
4   1   A      3
5   2   B      1
6   2   C      2
7   2   B      2