Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中选择数据帧的某些行?_Python_Pandas - Fatal编程技术网

如何在Python中选择数据帧的某些行?

如何在Python中选择数据帧的某些行?,python,pandas,Python,Pandas,我有一个熊猫数据框,看起来像这样: x_cor y_cor 893.200012 1 893.299988 17 893.400024 41 893.500000 39 893.599976 40 893.700012 36 893.799988 2 893.900024 13 894.000000 44 894.099976 43 894

我有一个熊猫数据框,看起来像这样:

              x_cor
y_cor             
893.200012       1
893.299988      17
893.400024      41
893.500000      39
893.599976      40
893.700012      36
893.799988       2
893.900024      13
894.000000      44
894.099976      43
894.200012      74
894.299988      88
894.400024      78
894.500000     132
894.599976     180
894.700012     178
我想做的是根据条件选择某些行,并从中创建两个不同的数据帧(其中一个由满足条件的行组成,另一个由不满足条件的行组成)。条件是每行的
x_cor
值是否大于前面和后面的
x_cor

例如,第三行
893.400024 41
满足条件,因为前一行的x_cor为17,下一行的x_cor为39,小于41


我认为如果我将循环与
iloc
ix
一起使用,效率会很低。有什么更好的方法可以做到这一点呢?

使用
shift

df.loc[(df.x_cor > df.x_cor.shift(1)) & (df.x_cor > df.x_cor.shift(-1))]

         y_cor  x_cor
2   893.400024     41
4   893.599976     40
8   894.000000     44
11  894.299988     88
14  894.599976    180

使用
shift

df.loc[(df.x_cor > df.x_cor.shift(1)) & (df.x_cor > df.x_cor.shift(-1))]

         y_cor  x_cor
2   893.400024     41
4   893.599976     40
8   894.000000     44
11  894.299988     88
14  894.599976    180

scipy
argrelextrema

from scipy.signal import argrelextrema
df.iloc[argrelextrema(df.x_cor.values, np.greater)]
Out[981]: 
            x_cor
y_cor            
893.400024     41
893.599976     40
894.000000     44
894.299988     88
894.599976    180

scipy
argrelextrema

from scipy.signal import argrelextrema
df.iloc[argrelextrema(df.x_cor.values, np.greater)]
Out[981]: 
            x_cor
y_cor            
893.400024     41
893.599976     40
894.000000     44
894.299988     88
894.599976    180

哇,这是一个如此简单和仍然强大的工作方式!谢谢你的帮助@maynull使用Wen的解决方案,比mineWow快得多,这是一种如此简单且仍然强大的工作方式!谢谢你的帮助@可以使用温的解决方案,比mine@Wen谢谢你的帮助!您知道如何获取行不符合条件的数据帧吗?@maynull
df.iloc[~df.index.isin(argrelextrema(df.x_cor.values,np.morer)[0])
答案非常好。我已经投了赞成票(实际上两个都投了)@Wen非常感谢你!Scipy很棒!我也是:-(顺便说一句,我认为这是最好的;太多的人有问题打电话给我,我看到到处都是“COLDSPEED”,而不是“c”ᴏʟᴅsᴘᴇᴇᴅ 就像它应该是>:-(@Wen谢谢你的帮助!你知道如何得到一个数据帧,其中的行不符合条件吗?@maynull
df.iloc[~df.index.isin(argrelextrema(df.x_cor.values,np.greater)[0])
非常好的答案。我已经投票了(实际上都投票了)@Wen非常感谢你!Scipy很棒!我也是:-(顺便说一句,我认为这是最好的选择;太多人对我有意见,我看到到处都是“COLDSPEED”,而不是“c”ᴏʟᴅsᴘᴇᴇᴅ 就像它应该是>:-(