Pandas 行选择不正常

Pandas Selection of rows not working propelry

我正在尝试从另一个 table 中删除不属于其他列条目的一部分的 df 行。进一步解释:我有一个 table 交易包括材料编号和另一个 table 生产信息也包括材料编号。我想删除包含材料编号但不在另一行中的每一行 table.

我的完整代码无法运行。当在小样本上使用时,代码正在做我期望的事情。见下文。

import pandas as pd
import numpy as np
import os

file_path = os.path.realpath(__file__)
dic_path = os.path.dirname(file_path)

os.chdir(dic_path)

df_V = pd.read_excel("V.xlsx", dtype ='str')

mn = df_V.MAT
print(mn.dtype)
mn = mn.drop_duplicates()
print(mn)

df_L = pd.read_excel("L.xlsx", sheet_name = "Sheet1", dtype ='str')

df_LH = df_L.head()

print(df_LH)

df_LH = df_LH[df_LH.MAT.isin(mn) == True]

print(df_LH)

按预期工作

df_L = df_L[df_L.MAT.isin(mn) == True]

df_L.to_excel("correct_L.xlsx")

print("done")

两个文件 new_L 以及 L 都包含相同的值,尽管在 head() 部分中删除了一些行。

表格如下:

Table V

index MAT Value
1.    1   any
2.    2   any
3.    2   any
4.    3   any

Table L
index MAT value
1.    1   any
2.    1   any
3.    2   any
4.    3   any
5.    4   any

predicted outcome

index MAT value
1.    1   any
2.    1   any
3.    2   any
4.    3   any

非常感谢

您可能希望在 pandas 中使用 merge 函数而不是 isin。

下面的代码简单演示了如何使用该功能

我们使用 how='left' 以便仅包含左侧数据框中的 'materials'。 on='MAT' 用于告诉 pandas 查看此列以决定应合并的内容。

    import pandas as pd
    v = pd.DataFrame([[1,9],[2,8],[2,7],[3,6]], columns=['MAT', 'V_vals'])
    l = pd.DataFrame([[1,5],[1,4],[2,3],[3,2],[4,1]], columns=['MAT', 'M_vals'])
    print('Table V:\n', v)
    print('Table M:\n', l)
    output = pd.merge(v,l, how='left', on='MAT')
    print('Merged table:\n', output)

这会产生如下所示的输出。

Table V:
    MAT  V_vals
0    1       9
1    2       8
2    2       7
3    3       6
Table M:
    MAT  M_vals
0    1       5
1    1       4
2    2       3
3    3       2
4    4       1
Merged table:
    MAT  V_vals  M_vals
0    1       9       5
1    1       9       4
2    2       8       3
3    2       7       3
4    3       6       2