我有一个大约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
答案 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'
成功了!