我有一个CSV文件,其中一栏名为position。大多数行遵循以下模式:列位置始终从1-6开始(例如-第1-12行)。但是,对于某些行,枚举不会增加到6,而是已经在4处停止,并且新的位置为1的行开始。在这种情况下,我要删除这些行的位置从1-4开始(例如-第13-16行)。
Example:
index position
row 1: 1
row 2: 2
...
row 6: 6
row 7: 1
...
row 12: 6
row 13: 1
row 14: 2
row 15: 3
row 16: 4
row 17: 1
...
row 22: 6
任何建议都非常感谢:)
您可以使用以下代码段解决问题。这个想法是,首先找到位置1-4的行,然后为行创建一个删除列表。最后放下它们,然后就可以使用它。
import pandas as pd
import numpy as np
df = pd.DataFrame({
"position": np.concatenate([
list(range(1,7)),
list(range(1,7)),
list(range(1,5)),
list(range(1,7)),
list(range(1,5))
])
})
df = df.append({'position': 1}, ignore_index=True)
df['diff_trail'] = df.position.diff()
rm_index_pos = df[df.diff_trail == -3].index - 1
# We know that 12-15 and 22-25 should be deleted
rm_index = np.ravel([list(range(i,i-4,-1)) for i in rm_index_pos])
rm_index = np.append(rm_index, df.index[-1])
print(rm_index)
df.drop(rm_index, axis=0, inplace=True) # Remove the unwanted rows.
df.drop(['diff_trail'], axis=1, inplace=True) # remove 'diff_trail' column from dataframe.
# Reset the index values.
df.reset_index(drop=True, inplace=True)
print(df)