为了账号安全,请及时绑定邮箱和手机立即绑定

第一行中的数据应等于最后一行-使用 Pandas

第一行中的数据应等于最后一行-使用 Pandas

一只甜甜圈 2021-12-16 14:52:17
我有一个大约 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行的数据,因此添加一个与第0行数据相同的新行(第3行)我们可以添加一个新列来标识新记录,例如 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 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

groupby将轻松构建 sub_dataframes per partition_num。从那时起,处理很简单:


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')


查看完整回答
反对 回复 2021-12-16
?
森林海

TA贡献2011条经验 获得超2个赞

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

它奏效了!!


查看完整回答
反对 回复 2021-12-16
?
HUH函数

TA贡献1836条经验 获得超4个赞

以下代码比较'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

索引列设置为“行”,它被重置和重命名以获得正确的排序。


查看完整回答
反对 回复 2021-12-16
  • 3 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信