gpt4 book ai didi

python - 如何根据 Pandas 中的条件现有列创建两列?

转载 作者:行者123 更新时间:2023-11-30 22:11:53 24 4
gpt4 key购买 nike

我有一个像这样的日期框:

import pandas as pd
df = pd.DataFrame({'Car_ID': ['B332', 'B332', 'B332', 'C315', 'C315', 'C315', 'C315', 'C315', 'F310', 'F310'], \
'Date': ['2018-03-15', '2018', '2018-03-12', '2018', '2018-03-16', '2018', \
'2018', '2018-03-11', '2018-03-10', '2018'], \
'Driver': ['Alex', 'Alex', 'Alex', 'Sara', 'Sara', 'Sara', 'Sara', 'Sara', 'Franck','Franck']})
df

Out:
Car_ID Date Driver
0 B332 2018-03-15 Alex
1 B332 2018 Alex
2 B332 2018-03-12 Alex
3 C315 2018 Sara
4 C315 2018-03-16 Sara
5 C315 2018 Sara
6 C315 2018 Sara
7 C315 2018-03-11 Sara
8 F310 2018-03-10 Franck
9 F310 2018 Franck

其中包含一些不正确的日期?因此,我想创建两个新列,如下所示:

    Car_ID  Date        D_Min       D_Max       Driver
0 B332 2018-03-15 2018-03-15 2018-03-15 Alex
1 B332 2018 2018-03-12 2018-03-15 Alex
2 B332 2018-03-12 2018-03-12 2018-03-12 Alex
3 C315 2018 2018-03-16 2018 Sara
4 C315 2018-03-16 2018-03-16 2018-03-16 Sara
5 C315 2018 2018-03-11 2018-03-16 Sara
6 C315 2018 2018-03-11 2018-03-16 Sara
7 C315 2018-03-11 2018-03-11 2018-03-11 Sara
8 F310 2018-03-10 2018-03-10 2018-03-10 Franck
9 F310 2018 2018 2018-03-10 Franck

对于 D_Min 对于不正确的日期,我想采用正确的日期之前的日期。如果之前的日期不正确,我将按原样采用,例如 9 F310 2018 2018 2018-03-10 Franck。我想对 D_Max 做同样的事情。但如果日期正确,D_MinD_Max 应该相同。

谢谢你的建议。

最佳答案

首先用 bool 掩码和 mask 将年份替换为 NaN然后groupbybfill用于回填ffill对于前向填充,最后将 NaN 替换为 fillna :

#only years are numeric
mask = df['Date'].str.isnumeric()
#alternative mask -check length of string
#mask = df['Date'].str.len() == 4
#not numeric return NaNs, so test non NaNs
#mask = pd.to_numeric(df['Date'], errors='coerce').notna()

s = df['Date'].mask(mask)

g = s.groupby(df['Driver'])
df['D_Min'] = g.bfill().fillna(df['Date'])
df['D_Max'] = g.ffill().fillna(df['Date'])

print (df)
Car_ID Date Driver D_Min D_Max
0 B332 2018-03-15 Alex 2018-03-15 2018-03-15
1 B332 2018 Alex 2018-03-12 2018-03-15
2 B332 2018-03-12 Alex 2018-03-12 2018-03-12
3 C315 2018 Sara 2018-03-16 2018
4 C315 2018-03-16 Sara 2018-03-16 2018-03-16
5 C315 2018 Sara 2018-03-11 2018-03-16
6 C315 2018 Sara 2018-03-11 2018-03-16
7 C315 2018-03-11 Sara 2018-03-11 2018-03-11
8 F310 2018-03-10 Franck 2018-03-10 2018-03-10
9 F310 2018 Franck 2018 2018-03-10

详细信息:

print (s)
0 2018-03-15
1 NaN
2 2018-03-12
3 NaN
4 2018-03-16
5 NaN
6 NaN
7 2018-03-11
8 2018-03-10
9 NaN
Name: Date, dtype: object

关于python - 如何根据 Pandas 中的条件现有列创建两列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51286589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com