如何在熊猫中为每个不同的ID添加新行?

时间:2018-07-13 12:44:58

标签: python pandas dataframe

我有一个像这样的datframe:

import pandas as pd
df = pd.DataFrame({'Car_ID': ['B332', 'B332', 'B332', 'C315', 'C315', 'C315', 'C315', 'C315', 'F310', 'F310'], \
                    'Date': ['2018-03-15', '2018-03-14', '2018-03-12', '2018-03-15', '2018-03-14', '2018-03-13', \
                             '2018-03-12', '2018-03-11', '2018-03-10', '2018-03-09'], \
                    'Driver': ['Alex', 'Alex', 'Alex', 'Sara', 'Sara', 'Sara', 'Sara', 'Sara', 'Franck','Franck'], \
                  'Info': ["Group_B", "Group_B", "Group_B", "Group_C", "Group_C", "Group_C", "Group_C", "Group_C", "Group_F", "Group_F"]})
df

    Car_ID  Date        Driver  Info
0   B332    2018-03-15  Alex    Group_B
1   B332    2018-03-14  Alex    Group_B
2   B332    2018-03-12  Alex    Group_B
3   C315    2018-03-15  Sara    Group_C
4   C315    2018-03-14  Sara    Group_C
5   C315    2018-03-13  Sara    Group_C
6   C315    2018-03-12  Sara    Group_C
7   C315    2018-03-11  Sara    Group_C
8   F310    2018-03-10  Franck  Group_F
9   F310    2018-03-09  Franck  Group_F

我想像这样在每个不同的Car_ID之前添加新行:

    Car_ID  Date        Driver  Info
0   B332    2018-03-15  Alex    Group_B
1   B332    2018-03-14  Alex    Group_B
2   B332    2018-03-12  Alex    Group_B
3   B332    2018-03-12  Alex    Changed
4   C315    2018-03-15  Sara    Group_C
5   C315    2018-03-14  Sara    Group_C
6   C315    2018-03-13  Sara    Group_C
7   C315    2018-03-12  Sara    Group_C
8   C315    2018-03-11  Sara    Group_C
9   C315    2018-03-11  Sara    Changed
10  F310    2018-03-10  Franck  Group_F
11  F310    2018-03-09  Franck  Group_F
12  F310    2018-03-09  Franck  Changed

shift()之前我该怎么做?

谢谢

1 个答案:

答案 0 :(得分:2)

插入行很昂贵。您可以使用groupby + last,连接两个数据帧,然后sort_values

df_last = df.groupby('Car_ID', as_index=False).last().assign(Info='Changed')

res = pd.concat([df, df_last], ignore_index=True)\
        .sort_values('Car_ID')\
        .reset_index(drop=True)

print(res)

   Car_ID        Date  Driver     Info
0    B332  2018-03-15    Alex  Group_B
1    B332  2018-03-14    Alex  Group_B
2    B332  2018-03-12    Alex  Group_B
3    B332  2018-03-12    Alex  Changed
4    C315  2018-03-15    Sara  Group_C
5    C315  2018-03-14    Sara  Group_C
6    C315  2018-03-13    Sara  Group_C
7    C315  2018-03-12    Sara  Group_C
8    C315  2018-03-11    Sara  Group_C
9    C315  2018-03-11    Sara  Changed
10   F310  2018-03-10  Franck  Group_F
11   F310  2018-03-09  Franck  Group_F
12   F310  2018-03-09  Franck  Changed