Дата сравнения имеет разные цифры - PullRequest
0 голосов
/ 06 февраля 2020

DF

date1            date2
0   201101       201201
1   20150215     2011
2   2019         201907
3   201608       20130706
4   20170717     2018

Как видите, дата имеет разные логиты: 4 (20xx), 6 (20xxxx), 8 (20xxxxxx). Я хочу сравнить эти 2 столбца и оставить только, если дата в 'date1' раньше.

Вывести то, что я хочу

    date1   date2
0   201101  201201
1   2019    201907
2   20170717    2018

условие

  1. Если дата не может сравниться, как 2019 - 201907, не знаете, какая дата быстрее, просто оставьте ее.

Спасибо за чтение

Редактировать

Вот мой реальный набор данных

    event    start
0   2013    201109
1   20040624    200401
2   20040624    200401
3   2013    20100806
4   20081103    200809
... ... ...
178382  20131029    20130918
178383  20140310    20140125
178384  20140310    20140125
178385  20130410    20131204
178386  20140709    20140227

1 Ответ

1 голос
/ 06 февраля 2020

Создайте для каждого формата отдельные фреймы данных, заполненные датами или пропущенными значениями, если они не совпадают, и объедините их вместе DataFrame.fillna:

f1 = lambda x: pd.to_datetime(x, format='%Y', errors='coerce')
f2 = lambda x: pd.to_datetime(x, format='%Y%m', errors='coerce')
f3 = lambda x: pd.to_datetime(x, format='%Y%m%d', errors='coerce')
df1 = df[['date1','date2']].apply(f1)
df2 = df[['date1','date2']].apply(f2)
df3 = df[['date1','date2']].apply(f3)

df4 = df1.fillna(df2).fillna(df3)
print (df4)
       date1      date2
0 2011-01-01 2012-01-01
1 2015-02-15 2011-01-01
2 2019-01-01 2019-07-01
3 2016-08-01 2013-07-06
4 2017-07-17 2018-01-01

df = df[df4['date1'].lt(df4['date2'])]
print (df)
      date1   date2
0    201101  201201
2      2019  201907
4  20170717    2018
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...