为什么第一个条件仅在通过匹配 Python Pandas Dataframe 中的两列来过滤行时执行

问题描述 投票:0回答:1

我有下面的代码来过滤掉数据中最早的年份和月份的行。我在下面的代码的方法 1 段中使用了逻辑运算符“&”。但是,如果第一个条件满足,下面代码的方法 1 段将过滤掉行,无论第二个条件是否满足(看起来是否满足)。方法 2 给出了正确的输出。

为了您的信息,Excel 文件中的“年”和“月”列采用“常规”格式。我也尝试了

Original_File_df.query
方法。

import pandas as pd
Original_File_df = pd.read_excel(open("6 Months.xlsx", "rb"), sheet_name = 0)
New_Data_File_df = pd.read_excel(open("1 Month.xlsx", "rb"), sheet_name = 0)

#Method 1 Start
Original_File_YMMin = pd.to_datetime(Original_File_df["Year"].astype(str) + "-" + Original_File_df["Month"].astype(str), format='%Y-%m').min()
Original_File_df = Original_File_df[(Original_File_df["Year"] != Original_File_YMMin.year) & (Original_File_df["Year"] != Original_File_YMMin.month)]
#Method 1 End

#Method 2 Start
Original_File_df["YearMonth"] = pd.to_datetime(Original_File_df["Year"].astype(str) + "-" + Original_File_df["Month"].astype(str), format='%Y-%m')
Original_File_YMMin = Original_File_df["YearMonth"].min()
Original_File_df = Original_File_df[Original_File_df["YearMonth"] != Original_File_YMMin]
#Method 2 End

Original_File_df = Original_File_df._append(New_Data_File_df, ignore_index=True)
print(Original_File_df)

Screenshot of Expected & Output Results

python pandas
1个回答
0
投票

给定一个表达式

!x & !y
,只需通过布尔代数即可将其转换为
!(x | y)
。所以你问的实际上是“如果年份是 2023 年或月份是 10,则下降”。 (例如https://www.boolean-algebra.com/?q=eyh4eSl9。

为什么这是真的?好吧,让我们看一下 2023 年和 11 月的例子:

如果年份不是 2023 年且月份不是 10...

“年份不是 2023 年”-> 正确

“月份不是 10”-> 错误

正确与错误 -> 错误

因为子集运算保留

True
,所以 2023 年和 11 月被删除。

© www.soinside.com 2019 - 2024. All rights reserved.