首頁>Program>source

我必须从pandas資料框中提取帶有"出生日期"列中值的行,该行出現在帶有日期的列表中。

import pandas as pd
df = pd.DataFrame({'Name': ['Jack', 'Mary', 'David', 'Bruce', 'Nick', 'Mark', 'Carl', 'Sofie'],
                  'Date of birth': ['1973', '1999', '1995', '1992/1991', '2000', '1969', '1994', '1989/1990']})
dates = ['1973', '1992', '1969', '1989']
new_df = df.loc[df['Date of birth'].isin(dates)]
print(new_df)
0   Jack          1973
1   Mary          1999
2  David          1995
3  Bruce     1992/1991
4   Nick          2000
5   Mark          1969
6   Carl          1994
7  Sofie     1989/1990

最终我得到下表.如您所见,由於该值後跟/以及另一个值,因此不存在Bruce和Sofie的行.我應该如何拆分這两个過濾器?

  Name Date of birth
0  Jack          1973
5  Mark          1969
最新回復
  • 9天前
    1 #

    您可以使用str.contains:

    import pandas as pd
    df = pd.DataFrame({'Name': ['Jack', 'Mary', 'David', 'Bruce', 'Nick', 'Mark', 'Carl', 'Sofie'],
                       'Date of birth': ['1973', '1999', '1995', '1992/1991', '2000', '1969', '1994', '1989/1990']})
    dates = ['1973', '1992', '1969', '1989']
    new_df = df.loc[df['Date of birth'].str.contains(rf"\b{'|'.join(dates)}\b")]
    print(new_df)
    

    Output

       Name Date of birth
    0   Jack          1973
    3  Bruce     1992/1991
    5   Mark          1969
    7  Sofie     1989/1990
    

    字元串 rf"\b{'|'.join(dates)}\b" 是一个正則表達式模式,它將匹配包含任何日期的任何字元串。

  • 9天前
    2 #

    我更類似@DaniMesejo,但這是一種將值分割並堆叠的方法:

    df[df['Date of birth'].str.split('/', expand=True).stack().isin(dates).max(level=0)]
    

    輸出:

       Name Date of birth
    0   Jack          1973
    3  Bruce     1992/1991
    5   Mark          1969
    7  Sofie     1989/1990
    

  • node.js:如何將4个或更多表順序連線?
  • php:測試失败,並出現Integrity約束违規錯誤,但是在第一个測試用例中它通過了為什麼?