熊猫过滤是否支持别名?

时间:2019-04-11 17:52:52

标签: python pandas

考虑在 pandas 中进行过滤操作:

   first_replies_wo_comments = pandas.read_csv(path)

   recent = first_replies_wo_comments[
    (first_replies_wo_comments.POST_CREATED_AT > '2018-02-01') & 
    (first_replies_wo_comments.POST_CREATED_AT < '2018-03-13')
   ]

请注意,数据帧first_replies_wo_comments的名称已指定了3次。如果还有其他过滤条件,那就更多了。有什么办法可以使别名成为df-类似于SQL中的别名吗?

更新我知道/ dataframe.query()。我想知道使用括号方法(在[]内部)存在哪些选项。谢谢!

1 个答案:

答案 0 :(得分:2)

您可以为此使用DataFrame.query,并且可以链接每个新条件:

df = pd.DataFrame({'POST_CREATED_AT': pd.date_range('20180128', periods=7)})
print(df)

  POST_CREATED_AT
0      2018-01-28
1      2018-01-29
2      2018-01-30
3      2018-01-31
4      2018-02-01
5      2018-02-02
6      2018-02-03

df_filter = df.query('POST_CREATED_AT > 20180201').query('POST_CREATED_AT < 20180313')
print(df_filter)

  POST_CREATED_AT
5      2018-02-02
6      2018-02-03

另一种方法,是mask您的条件,它与SQL别名更为接近:

df = pd.DataFrame({'POST_CREATED_AT': pd.date_range('20180128', periods=7),
                   'ID':['A', 'B', 'C', 'D', 'E', 'F', 'G']})
print(df)
  POST_CREATED_AT ID
0      2018-01-28  A
1      2018-01-29  B
2      2018-01-30  C
3      2018-01-31  D
4      2018-02-01  E
5      2018-02-02  F
6      2018-02-03  G

m1 = df['POST_CREATED_AT'].between('20180201', '20180313', inclusive=False)
m2 = df['ID'] == 'G'

print(df[m1 & m2])

  POST_CREATED_AT ID
6      2018-02-03  G