函数将特定行移动到pandas数据帧的顶部或底部



我有两个函数,分别将panda数据帧的一行移到顶部或底部。在将它们多次应用于数据帧之后,它们似乎工作不正确。

这是将行移动到顶部/底部的2个功能:

def shift_row_to_bottom(df, index_to_shift):
"""Shift row, given by index_to_shift, to bottom of df."""

idx = df.index.tolist()
idx.pop(index_to_shift)
df = df.reindex(idx + [index_to_shift])

return df

def shift_row_to_top(df, index_to_shift):
"""Shift row, given by index_to_shift, to top of df."""

idx = df.index.tolist()
idx.pop(index_to_shift)
df = df.reindex([index_to_shift] + idx)

return df

注意:我不想为返回的df使用reset_index

示例:

df = pd.DataFrame({'Country' : ['USA', 'GE', 'Russia', 'BR', 'France'], 
'ID' : ['11', '22', '33','44', '55'],
'City' : ['New-York', 'Berlin', 'Moscow', 'London', 'Paris'],
'short_name' : ['NY', 'Ber', 'Mosc','Lon', 'Pa']
})
df =
Country  ID  City    short_name
0   USA      11  New-York   NY
1   GE       22  Berlin     Ber
2   Russia   33  Moscow     Mosc
3   BR       44  London     Lon
4   France   55  Paris      Pa

这是我的数据帧:

现在,第一次应用函数。将索引为0的行移到底部:

df_shifted = shift_row_to_bottom(df,0)
df_shifted = 
Country     ID  City      short_name
1   GE      22  Berlin    Ber
2   Russia  33  Moscow    Mosc
3   BR      44  London    Lon
4   France  55  Paris     Pa
0   USA     11  New-York  NY

结果正是我想要的。

现在,再次应用函数。这次将索引为2的行移到底部:

df_shifted = shift_row_to_bottom(df_shifted,2)
df_shifted =
Country     ID  City    short_name
1   GE      22  Berlin    Ber
2   Russia  33  Moscow    Mosc
4   France  55  Paris     Pa
0   USA     11  New-York  NY
2   Russia  33  Moscow    Mosc

这不是我所期望的。当我想再次应用该函数时,一定有问题。该问题类似于函数shift_row_to_top

我的问题是:

  • 这里发生了什么
  • 有没有更好的方法将特定行移到数据帧的顶部/底部?也许是熊猫的活动
  • 如果没有,你会怎么做

您的问题是这两行:

idx = df.index.tolist()
idx.pop(index_to_shift)

idx是列表,并且idx.pop(index_to_shift)移除idx的索引index_to_shift处的项目,该项目不必像在第二种情况中那样被值为index_to_shift

试试这个功能:

def shift_row_to_bottom(df, index_to_shift):
idx = [i for i in df.index if i!=index_to_shift]
return df.loc[idx+[index_to_shift]]
# call the function twice
for i in range(2): df = shift_row_to_bottom(df, 2)

输出:

Country  ID      City short_name
0     USA  11  New-York         NY
1      GE  22    Berlin        Ber
3      BR  44    London        Lon
4  France  55     Paris         Pa
2  Russia  33    Moscow       Mosc

相关内容

  • 没有找到相关文章

最新更新