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
我正在尝试从另一个 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