Python 如何基于熊猫中具有条件的现有列创建两个列?
我有这样一个日期框:Python 如何基于熊猫中具有条件的现有列创建两个列?,python,pandas,dataframe,Python,Pandas,Dataframe,我有这样一个日期框: 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', \
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
哪些包含不正确的日期?因此,我想创建两个新列,如下所示:
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-03-10法郎
。
我想对D_Max
也这样做。但如果日期正确,则D_Min
和D_Max
应相同
谢谢你的建议 首先用布尔掩码将年份替换为
NaN
s,然后用替换为用于反向填充,最后用替换为NaN
s:
详细信息:
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
您好,我如何做同样的工作,但通过groupby 2列而不是1列?谢谢@jezrael@M-M-然后将
s.groupby(df['Driver'])
更改为s.groupby([df['Driver'],df['col']))
它不工作@jezrael我得到了un错误TypeError:unhabable类型:'list'
@M-M-刚刚在pandas0.23.1
中测试了样本数据和g=s.groupby([df['Car\u ID',df['Driver'])
-对我来说它工作正常。可能忘记了[]
?是的,这是[]
问题。蒂纳克斯