[英]How to assign a value if in between values using Pandas
我的df_created
:
created_date
------------
2020-01-01
2020-01-21
2020-01-15
2020-01-01
2020-01-26
2020-01-30
請注意,上面的created_date
是隨機日期順序
我還有另一個df_ipsum
id date_start date_end
--- ----------- ----------
100 2020-01-01 2020-01-09
101 2020-01-10 2020-01-19
102 2020-01-20 2020-01-29
103 2020-01-30 2020-02-09
104 2020-02-10 2020-02-19
如果df_created
Data Frame
上created_date
的值介於date_start
和date_end
之間,我想要做的是從df_ipsum
分配id
的值,因此新的df_created
如下所示:
created_date id_2
------------ ----
2020-01-01 100
2020-01-21 102
2020-01-15 101
2020-01-01 100
2020-01-26 102
2020-01-30 103
我做了什么?
# using conditional expression: a if cond else b
df_created['id_2'] = df_ipsum['id'] if (~df_created['created_date'].between(df_ipsum['date_start'],
df_ipsum['date_end'])) else False
當我這樣做時,我收到此錯誤:
ValueError: Can only compare identically-labeled Series objects
但是,我的dtypes
是相同的,即所有df_created['created_date']
、 df_ipsum['date_start']
和df_ipsum['date_end']
的datetime64[ns]
]
有人可以幫我解決這個問題嗎?
您可以使用pd.cut
:
df_created['id'] = pd.cut(df_created['created_date'],
bins=[df_ipsum['date_start'].iloc[0]] + list(df_ipsum['date_end']),
include_lowest=True,
labels=df_ipsum['id'])
Output:
created_date id
0 2020-01-01 100
1 2020-01-21 102
2 2020-01-15 101
3 2020-01-01 100
4 2020-01-26 102
5 2020-01-30 103
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.