簡體   English   中英

如果在使用 Pandas 的值之間,如何分配一個值

[英]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 Framecreated_date的值介於date_startdate_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM