[英]Dataframe filter rows based on comparison with another dataframe
我想根據日期過濾一個 dataframe,該日期介於另一個 dataframe 的日期之間。
我試過以下代碼:
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'])]
它應該 select 所有三行 df2。 但是給出了這個錯誤:
ValueError: Can only compare identically-labeled Series objects
PS 在我的情況下,行數不能相同。
您應該在兩個數據框中有相同數量的行進行比較。這里您在df1
中有 5 行,在df2
中有 3 行。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.