使用其他数据框未包含的行创建一个新的数据框

时间:2020-03-11 11:41:52

标签: python pandas dataframe

我需要使用数据框“结果”中未包括但在数据框“ df”中的行创建一个新的数据框,而无需创建新的过滤器。

我不知道该怎么做。你能帮我吗? (对不起,如果菜鸟有问题)

import pandas as pd

#Creating dataframe
d = {'col1': [1, 2,3,4,5,6,7,8,9,10], 'col2': ['a','b','b','b','c','d','c','a','z','c']}
df = pd.DataFrame(data=d)

#Finding the lines that contain a certain letter
a = df[df['col2'].str.contains("a")]
b = df[df['col2'].str.contains("b")]
c = df[df['col2'].str.contains("c")]

#Merge the 3 data frames
frames = [a, b, c]
results = pd.concat(frames)
print(results)

3 个答案:

答案 0 :(得分:0)

更好的解决方案应该是使用|将三个3个掩码合为一个来创建掩码,然后对于不匹配的行用~来反转掩码:

m = df['col2'].str.contains("a|b|c")
results = df[m]
print(results)
   col1 col2
0     1    a
1     2    b
2     3    b
3     4    b
4     5    c
6     7    c
7     8    a
9    10    c

df1 = df[~m]
print (df1)
   col1 col2
5     6    d
8     9    z

您的解决方案应通过过滤不匹配的索引值来更改:

df1 = df[~df.index.isin(results.index)]
print (df1)
   col1 col2
5     6    d
8     9    z

答案 1 :(得分:0)

首先合并 df 结果

data=c(1,1,1,1,11,1,1,1,1,12,1,1,2,1,1,1)
sapply(data, function(x) ifelse (lag(x)!=1,lag(x),x))

然后使用new_df = pd.concat([df, results]) 参数删除所有重复项,以从两个数据框中删除所有常见条目,您将获得所需的数据框

keep=False

答案 2 :(得分:0)

使用df.index.difference-将返回不在其他数据框中的索引。

>>> df.iloc[df.index.difference(results.index)]
   col1 col2
5     6    d
8     9    z

>>> df[~df.isin(results).all(1)]
   col1 col2
5     6    d
8     9    z
相关问题