我有兩個數據框,一個包含一些購買數據,另一個包含每週日曆,例如,Python根據複雜標準從第二個數據框中選擇行
df1:
purchased_at product_id cost
01-01-2017 1 £10
01-01-2017 2 £8
09-01-2017 1 £10
18-01-2017 3 £12
df2:
week_no week_start week_end
1 31-12-2016 06-01-2017
2 07-01-2017 13-01-2017
3 14-01-2017 20-01-2017
我要使用的數據來自兩個添加「week_no」列於DF1,這是從DF2基於其中在DF1的「purchased_at」日期落在「week_start」和「week_end」之間選擇在日期DF2,即
df1:
purchased_at product_id cost week_no
01-01-2017 1 £10 1
01-01-2017 2 £8 1
09-01-2017 1 £10 2
18-01-2017 3 £12 3
我已經搜查,但我沒能找到其中的數據正在從使用兩者之間的比較第二數據幀拉到一個例子,我已經無法正確應用我找到的任何示例,例如
df1.loc[(df1['purchased_at'] < df2['week_end']) &
(df1['purchased_at'] > df2['week_start']), df2['week_no']
是不成功的,與ValueError異常「只能比較相同標記的Series對象」
任何人都可以幫助解決這個問題,或者我打開的建議,如果有更好的方式來實現同樣的結果。
編輯添加的DF1的進一步詳細
DF1全數據幀頭部
purchased_at purchase_id product_id product_name transaction_id account_number cost
01-01-2017 1 1 A 1 AA001 £10
01-01-2017 2 2 B 1 AA001 £8
02-01-2017 3 1 A 2 AA008 £10
03-01-2017 4 3 C 3 AB040 £12
...
09-01-2017 12 1 A 10 AB102 £10
09-01-2017 13 2 B 11 AB102 £8
...
18-01-2017 20 3 C 15 AA001 £12
所以purchase_id每一行逐步增加,PRODUCT_ID和PRODUCT_NAME有一個1:1的關係, transaction_id也會逐步增加,但是在一個事務中可以有多次購買。
解析'df1'的日期應該足夠了,因爲您在這幾個星期使用的定義似乎是*標準*之一。所以,請看看[this](https://stackoverflow.com/questions/2600775/how-to-get-week-number-in-python),而暫時忘掉'df2'。 –
在您的查詢中,數據框將(通常)具有完全不同的形狀。您需要在每個數據框中構建一個可以[加入]的密鑰(https://pandas.pydata.org/pandas-docs/stable/merging.html)(嘗試在df1中開始每週的某一天)。與上面的評論一起,這應該暗示一個解決方案 – Quickbeam2k1
這不是一個標準的定義,因爲這個數字在未來幾年會持續下去,所以明年將是53-104周等等,這就是爲什麼我想加入它單獨而不是從內置公式計算。 – Sarah