在具有连续索引和id的连接数据框中删除一行



我有两个数据帧连接在一起:

import pandas as pd
df1 = pd.DataFrame({
'ID': [1,2,3],
'Name': ['Car1', 'Car2', 'Car3'],
'Number': [0,1,2]
})
df2 = df1.copy()
df2['ID'] += len(df1)
df2['Number'] += len(df1)
final_df2 = pd.concat([df1, df2], ignore_index=True)

这将创建一个带有" id "one_answers";Number"列正确编号从1到6和0到5。现在我需要从数据框中删除第二个Car1,并在删除行之后让数据框恢复正确编号。因此,理想的结果看起来像:

[ID    Name   Number]
[1     Car1      0  ]
[2     Car2      1  ]
[3     Car3      2  ]
[4     Car2      3  ]
[5     Car3      4  ]

或者我认为更好的选择是完全忽略第二个数据帧中的Car1。有没有从第一行开始复制的方法?

您可以使用像[1:]这样的切片跳过开始(或结束)行

final_df2 = pd.concat([df1, df1[1:]], ignore_index=True)

在所有情况下,您必须重新分配NumberID的所有值

您可以使用range()(或np.arange())

final_df2['Number'] = range(len(final_df2))
final_df2['ID'] = range(1, len(final_df2)+1)

或者您可以使用index来设置

final_df2['Number'] = final_df2.index
final_df2['ID'] = final_df2.index + 1

完整工作示例

import pandas as pd
df1 = pd.DataFrame({
'ID': [1, 2, 3],
'Name': ['Car1', 'Car2', 'Car3'],
'Number': [0, 1, 2]
})
final_df2 = pd.concat([df1, df1[1:]], ignore_index=True)
final_df2['Number'] = range(len(final_df2))
final_df2['ID'] = range(1, len(final_df2)+1)
#final_df2['Number'] = final_df2.index
#final_df2['ID'] = final_df2.index + 1
print(final_df2)
---