我有9153行和3列的数据框(标记)。 这是前5行。
with open('air_stations_Nov2017.csv', mode='r', encoding='utf=8') as file:
csv_file = csv.DictReader(file, delimiter=",")
json_data = []
for item in csv_file:
json_data.append({'Station':item['Station'],'District Name':item['District Name']})
print(json.dumps(json_data))
我想做的是看一条推文是否有两个标签,并且这些标签彼此不同,就像这些标签一样,
pk tag tweet
0 148 unknown 9491
1 149 ignore 9513
2 150 real 8461
3 151 fake 8639
4 152 unknown 8385
然后我从数据帧中消除这些推文。但是如果tweet获得了两个类似的标签,则接受tweet,并且不会被删除。 为了解决这个问题,我创建了一个新的数据框架,其中包含推文编号。及其标签数量
pk tag tweet
5287 5436 unknown 16600
8477 8626 real 16600
在这里x数据帧的前5行,一些推文获得3个甚至更多(最多15个)标签,但我只关心推文获得两个标签
x=pd.DataFrame(tag['tweet'].value_counts())
x.reset_index(inplace=True)
然后创建带有推文编号的列表。只有两个标签
index tweet
0 8252 15
1 9200 15
2 8646 13
3 8774 13
4 8322 13
但是我坚持如何比较tweet是否具有相似或不同的标签,如何删除,如果它们具有不同的标签,并接受,如果它们具有相似的标签。
答案 0 :(得分:0)
尝试获取每个推文的唯一计数,然后消除计数是否大于一个
import pandas as pd
# your original data frame
original_data = pd.read_csv("your tweets csv file")
# Create temp data frame with only required columns
temp_data = original_data[["tweets", "tags"]]
temp_data = temp_data.groupby(["tweet"], as_index=False).agg({"tags": "nunique"})
# Tweet with only with a single
temp_data = temp_data[temp_data["tags"] == 1]["tweets"]
# Filter original data frame for the desired tweets
original_data = original_data[original_data["tweets"].isin(temp_data)]
=====================================
Sample example
data = pd.DataFrame(data={"tweet: [1, 2, 3, 1, 2, 3], "tags": ["a", "b", "c", "d", "b", "c"]})
data = data.groupby(["tweet"], as_index=False).agg({"tags": "nunique"})
# Tweet with only with a single
data = data[data["tags"] == 1]
=====================================
希望这可以解决您的问题
答案 1 :(得分:0)
假设相似=相同,您可以在下面找到一个示例:
df = pd.DataFrame({'tag': ['1', '1', '2', '3', '3'],
'tweet': ['a', 'a', 'b', 'b', 'c']})
df = df.groupby('tweet').agg(['count', 'nunique'])
df.columns = df.columns.droplevel()
df[(df['count'] > 1) & (df['nunique'] == 1)]
还可以删除计数列,并且仅基于nunique
进行过滤。
干杯!
答案 2 :(得分:0)
您可以做的是: 将计数器表与基于推文的原始表连接起来,并根据推文列对它们进行排序。
tb_counter.columns = ['tweet', 'c']
tag_2 = tag.merge(tb_counter, how='left', on='tweet')
tag_2 = tag_2.sort_values('tweet')
tag_2.head()
接下来,就是找到只出现两次的推文(列c
),然后使用tag
将其与主要的pk
或numpy
列进行比较。
import numpy as np
tag_2['same_and_2'] = np.where(((tag_2['c'] == 2) & (tag_2['pk'] != tag_2['pk'].shift())), 1, 0)
tag_2.head()