Python 在列中每次出现后,每个元素的数据帧计数出现次数
给定一个像这样的数据帧Python 在列中每次出现后,每个元素的数据帧计数出现次数,python,pandas,Python,Pandas,给定一个像这样的数据帧 pd.DataFrame(数据={“代码”:[1,1,1,0,0,1,1,0,0,1,2]}) 时间码 0 1 1 1 2 1 3 0 4 0 5 1 6 1 7 0 8 0 9 1 10 2 11 2 我想计算每次新出现后,code中的每个元素出现的次数。请注意,我不想为每个元素计算.value\u counts()。例如,对于c
pd.DataFrame(数据={“代码”:[1,1,1,0,0,1,1,0,0,1,2]})
时间码
0 1
1 1
2 1
3 0
4 0
5 1
6 1
7 0
8 0
9 1
10 2
11 2
我想计算每次新出现后,code
中的每个元素出现的次数。请注意,我不想为每个元素计算.value\u counts()
。例如,对于code
value1
而言,它显示3次,value0
显示2次,value2
显示1次。这项任务的类比是计算用户会话数
预期产出:
代码计数\u发生次数
1 3
0 2
2 1
非常确定这可以在普通Python中实现
myList = [1,2,6,2,2,4,3,3,4,4,6,1,1,2,3]
listSet = set(myList)
count = {}
for k in listSet:
count[k]=0
for k in range(0, len(myList)-1):
if myList[k]!=myList[k+1]:
count[myList[k]]+=1
count[myList[k+1]]+=1
print(count)
这使得:
{1: 2, 2: 3, 3: 2, 4: 2, 6: 2}
非常确定这可以在普通Python中实现
myList = [1,2,6,2,2,4,3,3,4,4,6,1,1,2,3]
listSet = set(myList)
count = {}
for k in listSet:
count[k]=0
for k in range(0, len(myList)-1):
if myList[k]!=myList[k+1]:
count[myList[k]]+=1
count[myList[k+1]]+=1
print(count)
这使得:
{1: 2, 2: 3, 3: 2, 4: 2, 6: 2}
有了熊猫,你可以做类似的事情
df.codes.loc[df.codes!=df.codes.shift()].value_counts()
这将仅在元素不等于前一个元素的情况下对代码中的值进行计数。使用pandas,您可以执行以下操作
df.codes.loc[df.codes!=df.codes.shift()].value_counts()
这将只在元素不等于前一个元素的情况下计算代码中的值。我不理解值2,对我来说它出现了2次正如我所说的,我不希望
值本身计算,而是希望元素在每个元素更改后出现多少次。目标逻辑将位于执行移位和检查previous\u code!=当前代码
和每次发生时的sum+1,每个代码。我不理解值2,对我来说它出现2次正如我所说,我不希望值本身计数
,而是希望元素在每个元素更改后出现多少次。目标逻辑将位于执行移位和检查previous\u code!=当前代码
和每次发生时的总和+1,每个代码。在这种情况下,它不起作用,因为3
出现2次。然而,它适用于所有其他的。也许应该有额外的逻辑来处理最后一个元素?这是一个很好的解决方案,但是在纯python中这样做有价值吗?我的意思是熊猫有这么多方便的功能,为什么不使用呢?--我真的不想无礼,但这让我想起了Fortran时代,它的可读性比@gereleth solution@Magellan88要差得多。熊猫是伟大的,我目前学习它的数据科学的先决条件,但OP并没有严格要求熊猫的方式。只是一个想法。这是一个实际的解决方案,效果很好。然而,我不能给你这个问题的解决方案奖励,因为我更喜欢@gereleth,因为他以熊猫的方式实现了它。不过,谢谢你的回答!在这种情况下,当3
出现2次时,它不起作用。然而,它适用于所有其他的。也许应该有额外的逻辑来处理最后一个元素?这是一个很好的解决方案,但是在纯python中这样做有价值吗?我的意思是熊猫有这么多方便的功能,为什么不使用呢?--我真的不想无礼,但这让我想起了Fortran时代,它的可读性比@gereleth solution@Magellan88要差得多。熊猫是伟大的,我目前学习它的数据科学的先决条件,但OP并没有严格要求熊猫的方式。只是一个想法。这是一个实际的解决方案,效果很好。然而,我不能给你这个问题的解决方案奖励,因为我更喜欢@gereleth,因为他以熊猫的方式实现了它。不过,谢谢你的回答!