我想根据另一个数据帧的日期之间的日期过滤一个数据帧。
我尝试过以下代码:
df1 = pd.DataFrame({
'Start':['1/1/2016', '1/1/2016', '1/1/2016', '1/1/2016', '1/1/2016'],
'end':['1/12/2016', '1/12/2016', '1/12/2016', '1/12/2016', '1/12/2016'],
'Qty':[1, 2, 3, 4, 2],
})
df2 = pd.DataFrame({
'Start':['1/1/2016', '1/1/2016', '1/1/2016'],
'end':['1/6/2016', '1/6/2016', '1/6/2016'],
'Price':[11, 12, 31],
})
df2[(df2['Start']>=df1['Start']) & (df2['end']<=df1['end'])]
它应该选择 df2 的所有三行。但给出了这个错误:
ValueError:只能比较相同标签的Series对象
附注在我的例子中,行数不能相同。
最佳答案
-
pandas.to_datetime()
- 将参数转换为日期时间。 -
DataFrame.reindex()
- 使用可选的填充逻辑使 DataFrame 符合新索引,将 NA/NaN 放置在先前索引中没有值的位置。
例如
import pandas as pd
df1 = pd.DataFrame({
'Start':['1/1/2016', '1/1/2016', '1/1/2016', '1/1/2016', '1/1/2016'],
'end':['1/12/2016', '1/12/2016', '1/12/2016', '1/12/2016', '1/12/2016'],
'Qty':[1, 2, 3, 4, 2],
})
df2 = pd.DataFrame({
'Start':['1/1/2016', '1/1/2016', '1/1/2016'],
'end':['1/6/2016', '1/6/2016', '1/6/2016'],
'Price':[11, 12, 31],
})
# resize df2 shape
df2 = df2.reindex(df1.index)
# convert argument to datetime.
df1['Start'] = pd.to_datetime(df1['Start'])
df1['end'] = pd.to_datetime(df1['end'])
df2['Start'] = pd.to_datetime(df2['Start'])
df2['end'] = pd.to_datetime(df2['end'])
print(df2[(df2['Start'] >= df1['Start']) & (df2['end'] <= df1['end'])])
Start end Price
0 2016-01-01 2016-01-06 11.0
1 2016-01-01 2016-01-06 12.0
2 2016-01-01 2016-01-06 31.0
关于python - 数据框根据与另一个数据框的比较过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58267188/