【发布时间】:2018-03-14 18:09:01
【问题描述】:
我有以下数据框:
import pandas as pd
df = pd.DataFrame({"A":['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'], "M":[11,4,9,2,2,5,5,6,6]})
我的目标是删除所有列M 的连续值不相等的所有行。
因此应删除第 0、1 和 2 行,因为 M 的值是:11!=4、4!=9 和 9!=2)。但是,如果 2 行具有相同的连续值,则必须保留:第 3 行和第 4 行必须保留,因为它们的值都为 2。第 5 行和第 6 行的值为 5 的推理相同。
我能够通过使用以下代码行来实现我的目标:
l=[]
for i, row in df.iterrows():
try:
if df["M"].iloc[i]!=df["M"].iloc[i+1] and df["M"].iloc[i]!=df["M"].iloc[i-1]:
l.append(i)
except:
pass
df = df.drop(df.index[l]).reset_index(drop=True)
您能否提出一种更聪明、更好的方法来实现我的目标?也许通过使用一些内置的 pandas 功能?
数据框应该是这样的:
Before:
A M
0 a 11 <----Must be removed
1 s 4 <----Must be removed
2 d 9 <----Must be removed
3 f 2
4 g 2
5 h 5
6 j 5
7 k 6
8 l 6
After
A M
0 f 2
1 g 2
2 h 5
3 j 5
4 k 6
5 l 6
【问题讨论】:
标签: python pandas dataframe row