J'ai un dataframe (tag) avec 9153 lignes et 3 colonnes. Voici les 5 premières lignes.
tweet_no=[]
for i in x.itertuples():
if i.tweet==2:
tweet_no.append(i.index)
Ce que j'essaie de faire, c'est de voir si un tweet reçoit deux balises et que ces balises sont différentes l'une de l'autre, comme celles-ci,
XXX
alors j'élimine ces tweets de la base de données. mais si tweet obtient deux balises similaires, acceptez tweet et ne sera pas supprimé. Pour résoudre ce problème, j'ai créé un nouveau bloc de données composé de tweet no. et son nombre de balises
index tweet 0 8252 15 1 9200 15 2 8646 13 3 8774 13 4 8322 13
ici les 5 premières lignes de x data frame, certains tweets reçoivent 3 balises ou même plus (jusqu'à 15) mais je ne suis concerné que par les tweets obtenus deux balises
x=pd.DataFrame(tag['tweet'].value_counts()) x.reset_index(inplace=True)
Ensuite, créez une liste contenant le tweet no. qui n'a que deux balises
pk tag tweet 5287 5436 unknown 16600 8477 8626 real 16600
mais je suis resté sur la façon de comparer si les tweets ont des balises similaires ou différentes et supprimées si elles ont des balises différentes et acceptent si elles ont des balises similaires.
3 Réponses :
Essayez d'obtenir un nombre unique pour chaque tweet, puis éliminez si le nombre est supérieur à un
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]
=====================================
J'espère que cela résoudra votre problème
En supposant que similaire = le même, vous pouvez trouver un exemple ci-dessous:
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)]
Vous pouvez aussi supprimer la colonne de comptage et uniquement le filtre basé sur nunique .
Bravo!
Ce que vous pourriez faire, c'est: Rejoignez la table de comptage avec la table d'origine basée sur le tweet et triez-les en fonction de la colonne de tweet.
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()
Ensuite, il suffit de trouver les tweets qui n'apparaissent que deux fois (colonne c ) et de les comparer à la colonne tag ou pk en utilisant numpy .
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()
Il pourrait être utile de clarifier ce que vous entendez par «similaire». Si vous voulez dire identique, alors vous pouvez simplement parcourir votre bloc de données d'origine en vérifiant les tweets à deux balises et en comparant les deux balises avec
==. Si vous acceptez des balises de signification similaire ou d'épellation similaire, alors c'est un problème beaucoup plus compliqué.Bienvenue à SO; si l'une des réponses ci-dessous a résolu votre problème, veuillez accepter (voir que dois-je faire lorsque quelqu'un répond à mon question? ), sinon veuillez laisser un commentaire.