Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据列的值从数据框中删除行_Python_Dataframe - Fatal编程技术网

Python 根据列的值从数据框中删除行

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

我有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 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(column
c
),并使用
numpy
将其与prious
tag
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(column
c
),并使用
numpy
将其与prious
tag
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,并将这两条标记与
=
进行比较。如果你接受相似的含义或拼写相似的标签,那么这是一个更复杂的问题。如果你澄清了“相似”的含义,这可能会有所帮助。如果你的意思是相同的,那么你可以在原始数据框中重复检查两条标签推文,并将两个标签与
=
进行比较。如果你接受相似的意思或拼写相似的标签,那么这是一个更复杂的问题。