第一行中的数据应与最后一行相同-使用熊猫

时间:2019-03-25 17:56:16

标签: python python-3.x pandas

我有一个大约15列的pandas数据帧,我要做的就是查看partition_num的第一行中的数据是否等于partition_num的最后一行中的数据(如果不相等),请在以第一行的数据结尾

输入:

row   id  partition_num   lat    long    time
 0     1    7333           24     26      9
 1     2    7333           15     19      10
 2     3    7333           24     25      9
 3     1    8999           26     18      15
 4     2    8999           15     17      45
 5     3    8999           26     18      15
 6     1    3455           12     14      18
 7     2    3455           12     14      18

所需的输出:

row   id  partition_num   lat    long    time
 0     1    7333           24     26      9
 1     2    7333           15     19      10
 2     3    7333           25     26      9
 3     4    7333           24     26      9
 4     1    8999           26     18      15
 5     2    8999           15     17      45
 6     3    8999           26     18      15
 7     1    3455           12     14      18
 8     2    3455           12     14      18

由于第0行中partition_num -7333的数据不等于第2行中的数据,因此添加一个新行(第3行),该行的数据与第0行相同

我们可以添加一个新列来标识新记录吗,例如flag:

row   id  partition_num   lat    long    time   flag  
 0     1    7333           24     26      9      old  
 1     2    7333           15     19      10     old  
 2     3    7333           25     26      9      old  
 3     4    7333           24     26      9      new  
 4     1    8999           26     18      15     old  
 5     2    8999           15     17      45     old  
 6     3    8999           26     18      15     old  
 7     1    3455           12     14      18     old  
 8     2    3455           12     14      18     old  

3 个答案:

答案 0 :(得分:2)

groupby将很容易为每个partition_num建立sub_dataframe。从这一点来看,处理很简单:

for i, x in df.groupby('partition_num'):
    if (x.iloc[0]['partition_num':] != x.iloc[-1]['partition_num':]).any():
        s = x.iloc[0].copy()
        s.id = x.iloc[-1].id + 1
        df = df.append(s).reset_index(drop=True).rename_axis('row')

答案 1 :(得分:0)

以下代码比较第一行和最后一行'partition_num'的值,如果它们不匹配,则将第一行追加到数据帧的末尾:

if df.loc[0, 'partition_num'] != df.loc[len(df)-1, 'partition_num']:
    df = df.append(df.loc[0, :]).reset_index(drop=True)
    df.index.name = 'row'

print(df)
     id  partition_num  lat  long  time
row                                    
0     1           7333   24    26     9
1     2           7333   15    19    10
2     3           7333   24    26     9
3     1           8999   26    18    15
4     2           8999   15    17    45
5     3           8999   26    18    15
6     1           3455   12    14    18
7     2           3455   12    14    18
8     1           7333   24    26     9

索引列设置为“行”,并且将其重置并重命名以获得正确的顺序。

答案 2 :(得分:0)

将此片段添加到上述逻辑中: s ['flag'] ='new_row'

成功了!