2024-04-24 14:44:08 发布
网友
我希望能够过滤一个数据帧,并保留列列表在选择列表中的行。你知道吗
df = DataFrame({'A' : [5,6,3,4], 'B' : [1,2,3,5], 'C': range(4)})
输入:
df A B C 0 5 1 0 1 6 2 1 2 3 3 2 3 4 5 3 filter_list = [(6,2),(3,3)]
预期结果:
df A B C 1 6 2 1 2 3 3 2
我试过loc和map,但没有找到解决办法。你知道吗
提前谢谢。你知道吗
一位同事通过创建一个过滤数据帧,为我提供了一个关于大数据帧的更快的解决方案:
from pandas import merge, DataFrame df = DataFrame({'A' : [5,6,3,4], 'B' : [1,2,3,5], 'C': range(4)}) filter_list = [(6,2),(3,3)] filter_df = DataFrame(filter_list, columns=['A','B']) filtr = merge(df, filter_df, on=["A","B"], how="inner")
In [34]: df = DataFrame({'A' : [5,6,3,4], 'B' : [1,2,3,5], 'C': range(4)}) In [35]: df Out[35]: A B C 0 5 1 0 1 6 2 1 2 3 3 2 3 4 5 3
创建元组位置的布尔索引器,然后从框架中选择这些行
In [36]: df.loc[Series(zip(df.A,df.B)).isin([(6,2),(3,3)])] Out[36]: A B C 1 6 2 1 2 3 3 2
0.13版本(即将发布!),您可以这样做,docs here
In [37]: df.isin({ 'A' : [6,3], 'B' : [2,3] }) Out[37]: A B C 0 False False False 1 True True False 2 True True False 3 False False False In [38]: indexer = df.isin({ 'A' : [6,3], 'B' : [2,3] }) In [39]: indexer[['A','B']].all(1) Out[39]: 0 False 1 True 2 True 3 False dtype: bool In [40]: df.loc[indexer[['A','B']].all(1)] Out[40]: A B C 1 6 2 1 2 3 3 2
使用应用:
>>> fltr = df.apply(lambda x: (x["A"], x["B"]) in {(6,2),(3,3)}, axis=1) # 0 False # 1 True # 2 True # 3 False # dtype: bool >>> df[fltr] A B C 1 6 2 1 2 3 3 2
一位同事通过创建一个过滤数据帧,为我提供了一个关于大数据帧的更快的解决方案:
创建元组位置的布尔索引器,然后从框架中选择这些行
0.13版本(即将发布!),您可以这样做,docs here
使用应用:
相关问题 更多 >
编程相关推荐