2 回答

TA贡献1752条经验 获得超4个赞
在pandas通常有总是比遍历数据框用一种更好的方式for循环。
在这种情况下,您真正想要的是将相同的推文组合在一起并只保留第一个。这可以通过以下方式实现pandas.DataFrame.groupby:
import random
import string
import pandas as pd
# some random one character tweets, so there are many duplicates
df = pd.DataFrame({"Tweets": random.choices(string.ascii_lowercase, k=100),
"Data": [random.random() for _ in range(100)]})
df.groupby("Tweets", as_index=False).first()
# Tweets Data
# 0 a 0.327766
# 1 b 0.677697
# 2 c 0.517186
# 3 d 0.925312
# 4 e 0.748902
# 5 f 0.353826
# 6 g 0.991566
# 7 h 0.761849
# 8 i 0.488769
# 9 j 0.501704
# 10 k 0.737816
# 11 l 0.428117
# 12 m 0.650945
# 13 n 0.530866
# 14 o 0.337835
# 15 p 0.567097
# 16 q 0.130282
# 17 r 0.619664
# 18 s 0.365220
# 19 t 0.005407
# 20 u 0.905659
# 21 v 0.495603
# 22 w 0.511894
# 23 x 0.094989
# 24 y 0.089003
# 25 z 0.511532
更好的是,甚至有一个明确的函数pandas.drop_duplicates,它的速度大约是其两倍:
df.drop_duplicates(subset="Tweets", keep="first")

TA贡献1853条经验 获得超9个赞
笔记
Graipher 的解决方案告诉您如何生成唯一的数据帧。我的回答告诉您为什么您当前的操作删除了太多行(根据您的问题)。
尾注
当您输入“else”语句以删除重复的推文时,您将删除具有指定推文的所有行。我们来演示一下:
import numpy as np
import pandas as pd
df = pd.DataFrame(data=np.random.randint(0, 10, (10, 5)), columns=list('ABCDE'))
这有什么作用:
Out[118]:
A B C D E
0 2 7 0 5 4
1 2 8 8 3 7
2 9 7 4 6 2
3 9 7 7 9 2
4 6 5 7 6 8
5 8 8 7 6 7
6 6 1 4 5 3
7 1 4 7 8 7
8 3 2 5 8 5
9 5 8 9 2 4
在您的方法中(假设您想从“A”而不是“推文”中删除重复项),您最终会得到(即只有不唯一的行)。
Out[118]:
A B C D E
5 8 8 7 6 7
7 1 4 7 8 7
8 3 2 5 8 5
9 5 8 9 2 4
如果您只是想让它独一无二,请实施 Graipher 的建议。如果你想计算你有多少重复,你可以这样做:
total = df.shape[0]
duplicates = total - df.A.unique().size
添加回答
举报