Python在pandas df中匹配多列,然后删除不匹配的行

时间:2019-11-01 14:29:40

标签: python pandas datetime

我有一个包含多个时间/日期列的数据框:

{'city': {0: 'HOUSTON', 1: 'HOUSTON', 2: 'HOUSTON', 3: 'HOUSTON', 4: 'HOUSTON'}, 'timeDate_1': {0: Timestamp('2017-07-01 08:00:00'), 1: Timestamp('2017-07-01 08:00:00'), 2: Timestamp('2017-07-01 08:00:00'), 3: Timestamp('2017-07-01 08:00:00'), 4: Timestamp('2017-07-01 08:00:00')}, 'hour': {0: 2, 1: 2, 2: 3, 3: 4, 4: 4}, 'timeDate_2': {0: Timestamp('2017-01-07 00:00:00'), 1: Timestamp('2017-01-07 00:00:00'), 2: Timestamp('2017-01-07 00:00:00'), 3: Timestamp('2017-01-07 00:00:00'), 4: Timestamp('2017-01-07 00:00:00')}}

我需要在这些列之间进行匹配-就像timeDate_1等于timeDate_2(或hour列)一样,并删除日期和时间不匹配的所有行。显然,最简单的方法是拥有两个不同的表并仅按日期/时间联接,但是我现在太过深入。

每列的dtypes是:

timeDate_1       datetime64[ns]
hour                      int64
timeDate_2       datetime64[ns]

我执行isin操作时哪个错误:

df[df['timeDate_1'].isin(['timeDate_2', 'hour']) ]

ValueError: ('Unknown string format:', 'timeDate_2')

最简单的方法是什么? (除了解耦所有列并进行简单的连接)

1 个答案:

答案 0 :(得分:0)

尝试一下:

df[
   df['timeDate_1'].isin(df['timeDate_2'])
   | df['timeDate_1'].dt.hour.isin(df['hour']) 
]