繁体   English   中英

如何根据 python 中另一个 dataframe 的值过滤 dataframe

[英]How to filter a dataframe based on the values of another dataframe in python

数据框1

DF1:

H   Code     Parent  Days   Product Facility    Area    A   B   C   D   E   F   G   H   I   J   K
D   620LAKEV Samsung 0      Phone                       0   0   0   0   0   0   0   0   0       
D   620LAKEV Samsung 13     Phone                       6916.1  0   6916.1  6916.1  0   6916.1  6916.1  0   6916.1      
D   620LAKEV Samsung 14     Phone                       6916.1  0   6916.1  6916.1  0   6916.1  6916.1  0   6916.1      
D   620LAKEV Samsung 92     Phone                       20597.91    0   20597.91    20597.91    0   20597.91    20597.91    0   20597.91        
D   620LAKEV Samsung 184    Phone                       25164.01    0   25164.01    25164.01    0   25164.01    25164.01    0   25164.01        
D   620LAKEV Samsung 365    Phone                       30276.4 0   30276.4 30276.4 0   30276.4 30276.4 0   30276.4     
D   620LAKEV Samsung 1096   Phone                       29975.58    0   29975.58    29975.58    0   29975.58    29975.58    0   29975.58        
D   1011BC  Apple    0      Phone                       0   0   0   0   0   0   0   0   0       
D   1011BC  Apple    13     Phone                       0   0   0   0   0   0   0   0   0       
D   1011BC  Apple    14     Phone                       0   0   0   0   0   0   0   0   0       
D   1011BC  Apple    92     Phone                       0   0   0   0   0   0   0   0   0       
D   1011BC  Apple    184    Phone                       0   0   0   0   0   0   0   0   0       
D   1011BC  Apple    365    Phone                       611318.5    0   611318.5    611318.5    0   611318.5    611318.5    0   611318.5        
D   1011BC  Apple    1096   Phone                       2341752.75  0   2341752.75  2341752.75  0   2341752.75  2341752.75  0   2341752.75      
D   1011BC  Apple    0      Phone   1607774             0   0   0   0   0   0   0   0   0       
D   1011BC  Apple    13     Phone   1607774             0   0   0   0   0   0   0   0   0       
D   1011BC  Apple    14     Phone   1607774             0   0   0   0   0   0   0   0   0       
D   1011BC  Apple    92     Phone   1607774             0   0   0   0   0   0   0   0   0       
D   1011BC  Apple    184    Phone   1607774             0   0   0   0   0   0   0   0   0       
D   1011BC  Apple    365    Phone   1607774             611318.5    0   611318.5    611318.5    0   611318.5    611318.5    0   611318.5        
D   1011BC  Apple    1096   Phone   1607774             2341752.75  0   2341752.75  2341752.75  0   2341752.75  2341752.75  0   2341752.75      
D   1012SAS Apple    0      Phone   1572904             0   0   0   0   0   0   0   0   0       
D   1012SAS Apple    13     Phone   1572904             0   0   0   0   0   0   0   0   0       
D   1012SAS Apple    14     Phone   1572904             0   0   0   0   0   0   0   0   0       
D   1012SAS Apple    92     Phone   1572904             34894.82    0   34894.82    34894.82    0   34894.82    34894.82    0   34894.82        
D   1012SAS Apple    184    Phone   1572904             87095.26    0   87095.26    87095.26    0   87095.26    87095.26    0   87095.26        
D   1012SAS Apple    365    Phone   1572904             128485.89   0   128485.89   128485.89   0   128485.89   128485.89   0   128485.89       
D   1012SAS Apple    1096   Phone   1572904             141775.97   0   141775.97   141775.97   0   141775.97   141775.97   0   141775.97   

数据框2:

DF2:

H   Code        Parent  Days    Product Facility    Area
D   4AAK27778   Samsung 0       Phone       
D   4AAK27778   Samsung 13      Phone       
D   4AAK27778   Samsung 14      Phone       
D   4AAK27778   Samsung 92      Phone       
D   4AAK27778   Samsung 184     Phone       
D   4AAK27778   Samsung 365     Phone       
D   4AAK27778   Samsung 1096    Phone       
D   3G251866    Samsung 0       Phone       
D   3G251866    Samsung 13      Phone       
D   3G251866    Samsung 14      Phone       
D   3G251866    Samsung 92      Phone       
D   3G251866    Samsung 184     Phone       
D   3G251866    Samsung 365     Phone       
D   3G251866    Samsung 1096    Phone       
D   3W809327    Samsung 0       Phone       
D   3W809327    Samsung 13      Phone       
D   3W809327    Samsung 14      Phone       
D   3W809327    Samsung 92      Phone       
D   3W809327    Samsung 184     Phone       
D   3W809327    Samsung 365     Phone       
D   3W809327    Samsung 1096    Phone       
D   620LAKEV    Samsung 0       Phone       
D   620LAKEV    Samsung 13      Phone       
D   620LAKEV    Samsung 14      Phone       
D   620LAKEV    Samsung 92      Phone       
D   620LAKEV    Samsung 184     Phone       
D   620LAKEV    Samsung 365     Phone       
D   620LAKEV    Samsung 1096    Phone

    

预期 Output:

H   Code        Parent  Days    Product Facility    Area    A   B   C   D   E   F   G   H   I   J   K
D   620LAKEV    Samsung 0       Phone                       0   0   0   0   0   0   0   0   0       
D   620LAKEV    Samsung 13      Phone                       6916.1  0   6916.1  6916.1  0   6916.1  6916.1  0   6916.1      
D   620LAKEV    Samsung 14      Phone                       6916.1  0   6916.1  6916.1  0   6916.1  6916.1  0   6916.1      
D   620LAKEV    Samsung 92      Phone                       20597.91    0   20597.91    20597.91    0   20597.91    20597.91    0   20597.91        
D   620LAKEV    Samsung 184     Phone                       25164.01    0   25164.01    25164.01    0   25164.01    25164.01    0   25164.01        
D   620LAKEV    Samsung 365     Phone                       30276.4 0   30276.4 30276.4 0   30276.4 30276.4 0   30276.4     
D   620LAKEV    Samsung 1096    Phone                       29975.58    0   29975.58    29975.58    0   29975.58    29975.58    0   29975.58        

[![在此处输入图像描述][1]][1]

[![在此处输入图像描述][2]][2]

[![在此处输入图像描述][3]][3]

数据框1 [1]: https://i.stack.imgur.com/PPjsM.png

数据帧2:[2]: https://i.stack.imgur.com/8OQxl.png

预期 Output:[3]: https://i.stack.imgur.com/KPwrh.png

在 Dataframe1 中,Column AREA、J 和 K 为空,而在 datafarme2 中,Column Facility 和 Area 为空

我想根据 Dataframe2 中的值过滤 Dataframe1,我尝试了下面的代码但它不起作用,我不确定是什么问题,请你帮我过滤 dataframe1 数据。

keys = list(df2.columns.values)
i1 = df1.set_index(keys).index
i2 = df1.set_index(keys).index
filtered_df=df1[~i1.isin(i2)]
print(filtered_df)

您可以merge非空列:

# select non-empty columns from df2
cols2 = list(df2.dropna(how='all', axis=1))

# remove df2's empty columns from df1
cols1 = df1.columns.difference(df2.columns.difference(cols2))

out = df2.merge(df1[cols1], on=cols2).to_string()

output:

   H      Code   Parent  Days Product  Facility  Area         A         B    C         D         E    F         G  H.1   I   J   K
0  D  620LAKEV  Samsung     0   Phone       NaN   NaN      0.00      0.00  0.0      0.00      0.00  0.0      0.00  NaN NaN NaN NaN
1  D  620LAKEV  Samsung    13   Phone       NaN   NaN   6916.10   6916.10  0.0   6916.10   6916.10  0.0   6916.10  NaN NaN NaN NaN
2  D  620LAKEV  Samsung    14   Phone       NaN   NaN   6916.10   6916.10  0.0   6916.10   6916.10  0.0   6916.10  NaN NaN NaN NaN
3  D  620LAKEV  Samsung    92   Phone       NaN   NaN  20597.91  20597.91  0.0  20597.91  20597.91  0.0  20597.91  NaN NaN NaN NaN
4  D  620LAKEV  Samsung   184   Phone       NaN   NaN  25164.01  25164.01  0.0  25164.01  25164.01  0.0  25164.01  NaN NaN NaN NaN
5  D  620LAKEV  Samsung   365   Phone       NaN   NaN  30276.40  30276.40  0.0  30276.40  30276.40  0.0  30276.40  NaN NaN NaN NaN
6  D  620LAKEV  Samsung  1096   Phone       NaN   NaN  29975.58  29975.58  0.0  29975.58  29975.58  0.0  29975.58  NaN NaN NaN NaN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM