Python 根据列的值从数据框中删除行
我有9153行和3列的数据帧(标签)。 这里是前5行Python 根据列的值从数据框中删除行,python,dataframe,Python,Dataframe,我有9153行和3列的数据帧(标签)。 这里是前5行 pk tag tweet 0 148 unknown 9491 1 149 ignore 9513 2 150 real 8461 3 151 fake 8639 4 152 unknown 8385 我想做的是看看一条tweet是否有两个标签,这些标签彼此不同,就像这些标签一样 pk tag tweet 5287 5436 unknown 1
pk tag tweet
0 148 unknown 9491
1 149 ignore 9513
2 150 real 8461
3 151 fake 8639
4 152 unknown 8385
我想做的是看看一条tweet是否有两个标签,这些标签彼此不同,就像这些标签一样
pk tag tweet
5287 5436 unknown 16600
8477 8626 real 16600
然后我从数据帧中删除这些tweet。但若tweet得到两个相似的标签,那个么接受tweet并不会被删除。
为了解决这个问题,我创建了一个新的数据框,由tweet编号和它的标签数量组成
x=pd.DataFrame(tag['tweet'].value_counts())
x.reset_index(inplace=True)
这里是x数据帧的前5行,一些tweets得到3个甚至更多(最多15个)标签,但我只关心tweets得到两个标签
index tweet
0 8252 15
1 9200 15
2 8646 13
3 8774 13
4 8322 13
然后创建一个只有两个标签的tweet编号列表
tweet_no=[]
for i in x.itertuples():
if i.tweet==2:
tweet_no.append(i.index)
但我一直在研究如何比较tweet是否有相似或不同的标记,如果它们有不同的标记则删除,如果它们有相似的标记则接受。尝试获取每个tweet的唯一计数,如果计数大于1则消除
将熊猫作为pd导入
#您的原始数据帧
原始数据=pd.read\u csv(“您的tweets csv文件”)
#创建仅包含所需列的临时数据框
临时数据=原始数据[[“tweets”,“tags”]]
temp_data=temp_data.groupby([“tweet”],as_index=False).agg({“tags”:“nunique”})
#仅使用单个
temp_data=temp_data[temp_data[“tags”]==1][“tweets”]
#过滤所需tweet的原始数据帧
原始数据=原始数据[原始数据[“tweets”]。isin(临时数据)]
=====================================
示例
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”})
#仅使用单个
数据=数据[数据[“标记”]==1]
=====================================
希望这能解决您的问题尝试为每条tweet获取唯一的计数,然后在计数大于1时消除
将熊猫作为pd导入
#您的原始数据帧
原始数据=pd.read\u csv(“您的tweets csv文件”)
#创建仅包含所需列的临时数据框
临时数据=原始数据[[“tweets”,“tags”]]
temp_data=temp_data.groupby([“tweet”],as_index=False).agg({“tags”:“nunique”})
#仅使用单个
temp_data=temp_data[temp_data[“tags”]==1][“tweets”]
#过滤所需tweet的原始数据帧
原始数据=原始数据[原始数据[“tweets”]。isin(临时数据)]
=====================================
示例
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”})
#仅使用单个
数据=数据[数据[“标记”]==1]
=====================================
希望这能解决您的问题假设相似=相同,您可以找到以下示例:
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)]
最好删除count列,并仅基于nunique
进行筛选。
干杯 假设相似=相同,您可以找到以下示例:
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)]
最好删除count列,并仅基于nunique
进行筛选。
干杯 您可以做的是:
根据tweet将计数器表与原始表连接起来,并根据tweet列对其进行排序
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()
接下来,只需找到只出现两次的tweet(columnc
),并使用numpy
将其与prioustag
或pk
列进行比较
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()
您可以做的是:
根据tweet将计数器表与原始表连接起来,并根据tweet列对其进行排序
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()
接下来,只需找到只出现两次的tweet(columnc
),并使用numpy
将其与prioustag
或pk
列进行比较
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()
如果您澄清了“相似”的含义,这可能会有所帮助。如果您的意思是相同的,那么您可以在原始数据框中重复检查两条标记tweet,并将这两条标记与
=
进行比较。如果你接受相似的含义或拼写相似的标签,那么这是一个更复杂的问题。如果你澄清了“相似”的含义,这可能会有所帮助。如果你的意思是相同的,那么你可以在原始数据框中重复检查两条标签推文,并将两个标签与=
进行比较。如果你接受相似的意思或拼写相似的标签,那么这是一个更复杂的问题。