Python 从作为第一个数据帧的筛选子集的另一个数据帧中删除数据帧
我正在努力解决以下问题: 假设我有以下输入数据帧:Python 从作为第一个数据帧的筛选子集的另一个数据帧中删除数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我正在努力解决以下问题: 假设我有以下输入数据帧: df something library other_info FOO NaN blaa BAR ['bar/libBAR.a', 'bar/libBAR.cpp.so', 'bar/libBAR
df
something library other_info
FOO NaN blaa
BAR ['bar/libBAR.a', 'bar/libBAR.cpp.so', 'bar/libBARFIGHT.so'] bluu
MEH ['meh/libMEH.a', 'meh/libMEH.so', 'meh/libMEH.other.so'] blqq
regex = '.*/lib.*\.a'
df2 = df1[df1.library.str.contains(regex, regex=True, na=False)]
something library other_info
BAR bar/libBAR.a bluu
MEH meh/libMEH.a blqq
d1.drop(d1[condition].index, inplace=True)
然后,使用分解
数据帧功能:
df1 = df.explode('library')
something library other_info
FOO NaN blaa
BAR bar/libBAR.a bluu
BAR bar/libBAR.cpp.so bluu
BAR bar/libBARFIGHT.so bluu
MEH meh/libMEH.a blqq
MEH meh/libMEH.so blqq
MEH meh/libMEH.other.so blqq
之后,我将使用正则表达式应用筛选,以创建子集数据帧:
df
something library other_info
FOO NaN blaa
BAR ['bar/libBAR.a', 'bar/libBAR.cpp.so', 'bar/libBARFIGHT.so'] bluu
MEH ['meh/libMEH.a', 'meh/libMEH.so', 'meh/libMEH.other.so'] blqq
regex = '.*/lib.*\.a'
df2 = df1[df1.library.str.contains(regex, regex=True, na=False)]
something library other_info
BAR bar/libBAR.a bluu
MEH meh/libMEH.a blqq
d1.drop(d1[condition].index, inplace=True)
因此,现在我正试图删除使用“条件”从df1筛选的条目:
创建条件(真/假系列)
在这种情况下,我试图从d1中删除我想要的条目(不创建新的dataframe):
但结果却令人惊讶:
something library other_info
FOO NaN blaa
因此,BAR和MEH的所有条目都已从数据帧中删除,即使每个“某物”只匹配一行
我做错了什么?什么是只过滤“True”行的正确方法?是否可以使用“filter”方法进行过滤?您可以只过滤
而不过滤条件
,就像这样
df3 = df1[~condition]
df3
产生
something library other_info
0 FOO NaN blaa
1 BAR bar/libBAR.cpp.so bluu
1 BAR bar/libBARFIGHT.so bluu
2 MEH meh/libMEH.so blqq
2 MEH meh/libMEH.other.so blqq
这对你有用吗
如果您更新explode
语句,则原始代码将正常工作,如下所示:
df1 = df.explode('library', ignore_index = True)
这将重新索引数据帧,这意味着您随后的操作使用唯一的索引值,而不是原始索引值(对于从同一行分解的行重复这些值)df1[~condition]按预期工作。非常感谢。对于您的另一个建议:我将不得不在将来合并这些行(反转explode函数)。如果我使用
ignore_index=True
这不是会让事情变得更难吗?如果“something”列中的值最初是唯一的,那么在所有这些操作之后,您总是可以对该列执行groupby
。如果没有,并且您需要依赖原始索引,那么是的,如果您重置它,将更难执行。因此,如果df
[~condition]`对您有效,那么我会坚持认为是的,在.expode()
之前,“something”中的值是唯一的,因此我将使用groupby
。非常感谢。