考虑以下 Dataframe df
:
df = pd.DataFrame(
{
"col1": [0,1,2,3,4,5,6,7,8,9,10],
"col2": ["A","B","C","D","E","F","G","H","I","J","K"],
"col3": [1e-0,1e-1,1e-2,1e-3,1e-4,1e-5,1e-6,1e-7,1e-8,1e-9,1e-10],
"col4": [0,4,2,5,6,7,6,3,6,2,1]
}
)
我希望在当前行的 col4 值大于前一行和下一行的 col4 值时选择行,并将它们存储在空帧中。
我写了下面的代码:
df1=pd.DataFrame()
for i in range(1,len(df)-1,1):
if ( (df.iloc[i]['col4'] > df.iloc[i+1]['col4']) and (df.iloc[i]['col4'] > df.iloc[i-1]['col4']) ):
df1=pd.concat([df1,df.iloc[i:i+1]])
我得到了预期的 Dataframe df1
col1 col2 col3 col4
1 1 B 1.000000e-01 4
5 5 F 1.000000e-05 7
8 8 I 1.000000e-08 6
但是这段代码很难看,可读性不强,...有没有最好的解决方案?
1条答案
按热度按时间a8jjtwal1#
使用
boolean indexing
,通过Series.shift
和Series.gt
比较下一个值和上一个值以获得更大的值,对于链式位AND
,使用&
:EDIT:始终包含第一行和最后一行的解决方案: