微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在考虑Pandas Dataframe中的组的列上显示下一个值

如何解决在考虑Pandas Dataframe中的组的列上显示下一个值

我有这个示例数据框,我需要显示特定客户区域组的下一个交货日期。 日期可以编码为字符串或日期时间,在此示例中,我使用的是字符串。

# Import pandas library 
import pandas as pd 
import numpy as np
data = [['NY','A','2020-01-01',10],['NY','2020-02-03',20],'2020-04-05',30],'2020-05-05',25],'B',15],'2020-02-02','2020-02-10',['FL','2020-02-01','2020-03-01',12],'2020-04-01','2020-05-01',20]
       ] 

# Create the pandas DataFrame 
df = pd.DataFrame(data,columns = ['Region','Client','deliveryDate','price']) 
  
# print dataframe. 
df 

Region  Client  deliveryDate    price
0   NY  A   2020-01-01  10
1   NY  A   2020-02-03  20
2   NY  A   2020-04-05  30
3   NY  A   2020-05-05  25
4   NY  B   2020-01-01  15
5   NY  B   2020-02-02  10
6   NY  B   2020-02-10  20
7   FL  A   2020-01-01  15
8   FL  A   2020-02-01  10
9   FL  A   2020-03-01  12
10  FL  A   2020-04-01  25
11  FL  A   2020-05-01  20

所需的输出

data2 = [['NY',float('nan'),20]
       ] 

# Create the pandas DataFrame 
df2 = pd.DataFrame(data2,'nextDelivery','price']) 

Region  Client  deliveryDate    nextDelivery    price
0   NY  A   2020-01-01  2020-02-03  10
1   NY  A   2020-02-03  2020-04-05  20
2   NY  A   2020-04-05  2020-05-05  30
3   NY  A   2020-05-05  NaN 25
4   NY  B   2020-01-01  2020-02-02  15
5   NY  B   2020-02-02  2020-02-10  10
6   NY  B   2020-02-10  NaN 20
7   FL  A   2020-01-01  2020-02-01  15
8   FL  A   2020-02-01  2020-03-01  10
9   FL  A   2020-03-01  2020-04-01  12
10  FL  A   2020-04-01  2020-05-01  25
11  FL  A   2020-05-01  NaN 20

谢谢。

解决方法

假设订购了交货日期,如何按地区和客户分组,然后应用shift

df['nextDelivery'] = df.groupby(['Region','Client']).shift(-1)['deliveryDate']

输出:

   Region Client deliveryDate  price nextDelivery
0      NY      A   2020-01-01     10   2020-02-03
1      NY      A   2020-02-03     20   2020-04-05
2      NY      A   2020-04-05     30   2020-05-05
3      NY      A   2020-05-05     25          NaN
4      NY      B   2020-01-01     15   2020-02-02
5      NY      B   2020-02-02     10   2020-02-10
6      NY      B   2020-02-10     20          NaN
7      FL      A   2020-01-01     15   2020-02-01
8      FL      A   2020-02-01     10   2020-03-01
9      FL      A   2020-03-01     12   2020-04-01
10     FL      A   2020-04-01     25   2020-05-01
11     FL      A   2020-05-01     20          NaN

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。