在 Pandas 中同时对 2 列进行逻辑运算
Do logical operations in 2 column simmultaneously in Pandas
我有一个数据框名称 df -
id year month target1
0 324 2019.0 1.0 100.0
1 325 2019.0 3.0 100.0
2 326 2019.0 10.0 100.0
3 327 2019.0 11.0 100.0
4 328 2019.0 12.0 100.0
现在我想比较数据框的 2 列,即 'year' 和 'month',以获得这样的新数据框 -
id year month amount
0 324 2019.0 1.0 100.0
1 325 2019.0 3.0 100.0
2 326 2019.0 10.0 100.0
这里的操作是 -
year <= 2019
&
month <= 10
如何在 Pandas 中实现此目的。
类似的操作可能是 -
year < 2019 & month <= 6
year < 2019 & month < 6
year < 2019 & month <= 12
使用 Python3 或 Pandas 实现此结果的任何逻辑或方法。
我尝试了一种逻辑,我只是简单地分别比较年和月,就像这样 -
df_new = df[df['year'] <= year ]
df_new = df_new[df_new['month_num'] <= month_num ]
但是如果我有超过 1 年的时间,这个逻辑就会失败。通过这个我得到这个数据框作为输出 -
year <= 2020 & month <= 1
id year month amount
0 3 2019.0 1.0 100.0
5 9 2020.0 1.0 100.0
但理想情况下我需要的是这个 -
year month target1
0 2019.0 1.0 100.0
1 2019.0 3.0 100.0
2 2019.0 10.0 100.0
3 2019.0 11.0 100.0
4 2019.0 12.0 100.0
5 2020.0 1.0 100.0
谢谢
IIUC 您希望应用两个条件,如 df['condition1' AND 'condition2']。如果是这样,这可能有效:
df1 = df.loc[df['year'] <= 2019].loc[df['month'] <= 10]
我用这个数据集试过(多年):
'''
id year month target1
0 324 2019.0 1.0 100.0
1 325 2019.0 3.0 100.0
2 326 2019.0 10.0 100.0
3 327 2019.0 11.0 100.0
5 328 2020.0 4.0 100.0
6 329 2020.0 12.0 100.0
7 330 2020.0 2.0 100.0
'''
df1 的输出:
id year month target1
0 324 2019.0 1.0 100.0
1 325 2019.0 3.0 100.0
2 326 2019.0 10.0 100.0
如果我将年份的条件更改为:
df1 = df.loc[df['year'] <= 2020].loc[df['month'] <= 10]
输出:
id year month target1
0 324 2019.0 1.0 100.0
1 325 2019.0 3.0 100.0
2 326 2019.0 10.0 100.0
5 328 2020.0 4.0 100.0
7 330 2020.0 2.0 100.0
您可以尝试这样的简单条件:
df['year'] = df['year'].astype(int)
df['month'] = df['month'].astype(int)
df = df[(df['year'] == 2019) & (df['month'] < 10)]
id year month target1
0 324 2019 1 100.0
1 325 2019 3 100.0
据我了解,您想在指定年份的指定月份之前打印所有内容。这可以通过多种方式完成
- 只需添加
data.query('(year == 2020 and month <= 1) or (year <= 2020)')
- 您可以尝试创建一个新列,它将使用 pd.to_datetime()
我有一个数据框名称 df -
id year month target1
0 324 2019.0 1.0 100.0
1 325 2019.0 3.0 100.0
2 326 2019.0 10.0 100.0
3 327 2019.0 11.0 100.0
4 328 2019.0 12.0 100.0
现在我想比较数据框的 2 列,即 'year' 和 'month',以获得这样的新数据框 -
id year month amount
0 324 2019.0 1.0 100.0
1 325 2019.0 3.0 100.0
2 326 2019.0 10.0 100.0
这里的操作是 -
year <= 2019
&
month <= 10
如何在 Pandas 中实现此目的。
类似的操作可能是 -
year < 2019 & month <= 6
year < 2019 & month < 6
year < 2019 & month <= 12
使用 Python3 或 Pandas 实现此结果的任何逻辑或方法。 我尝试了一种逻辑,我只是简单地分别比较年和月,就像这样 -
df_new = df[df['year'] <= year ]
df_new = df_new[df_new['month_num'] <= month_num ]
但是如果我有超过 1 年的时间,这个逻辑就会失败。通过这个我得到这个数据框作为输出 -
year <= 2020 & month <= 1
id year month amount
0 3 2019.0 1.0 100.0
5 9 2020.0 1.0 100.0
但理想情况下我需要的是这个 -
year month target1
0 2019.0 1.0 100.0
1 2019.0 3.0 100.0
2 2019.0 10.0 100.0
3 2019.0 11.0 100.0
4 2019.0 12.0 100.0
5 2020.0 1.0 100.0
谢谢
IIUC 您希望应用两个条件,如 df['condition1' AND 'condition2']。如果是这样,这可能有效:
df1 = df.loc[df['year'] <= 2019].loc[df['month'] <= 10]
我用这个数据集试过(多年):
'''
id year month target1
0 324 2019.0 1.0 100.0
1 325 2019.0 3.0 100.0
2 326 2019.0 10.0 100.0
3 327 2019.0 11.0 100.0
5 328 2020.0 4.0 100.0
6 329 2020.0 12.0 100.0
7 330 2020.0 2.0 100.0
'''
df1 的输出:
id year month target1
0 324 2019.0 1.0 100.0
1 325 2019.0 3.0 100.0
2 326 2019.0 10.0 100.0
如果我将年份的条件更改为:
df1 = df.loc[df['year'] <= 2020].loc[df['month'] <= 10]
输出:
id year month target1
0 324 2019.0 1.0 100.0
1 325 2019.0 3.0 100.0
2 326 2019.0 10.0 100.0
5 328 2020.0 4.0 100.0
7 330 2020.0 2.0 100.0
您可以尝试这样的简单条件:
df['year'] = df['year'].astype(int)
df['month'] = df['month'].astype(int)
df = df[(df['year'] == 2019) & (df['month'] < 10)]
id year month target1
0 324 2019 1 100.0
1 325 2019 3 100.0
据我了解,您想在指定年份的指定月份之前打印所有内容。这可以通过多种方式完成
- 只需添加
data.query('(year == 2020 and month <= 1) or (year <= 2020)')
- 您可以尝试创建一个新列,它将使用 pd.to_datetime()