删除特定条件熊猫的行(枚举)

问题描述 投票:0回答:1

我有一个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

任何建议都非常感谢:)

python pandas rows
1个回答
0
投票

您可以使用以下代码段解决问题。这个想法是,首先找到位置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)
© www.soinside.com 2019 - 2024. All rights reserved.