Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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_Dataframe - Fatal编程技术网

Python 减少数据帧行和查找

Python 减少数据帧行和查找,python,pandas,dataframe,Python,Pandas,Dataframe,需要以下方面的帮助。 假设我们有一个数据帧: dictionary ={'Category':['a','a','a','a','a','a','a','a','b','b','b','b','b','b','b'], 'val1':[11,13,14,17,18,21,22,25,2,8,9,13,15,16,19], 'val2':[1,0,5,1,4,3,5,9,4,1,5,2,4,0,3]} df=pd.DataFrame(dictionary) “val1”总是在“类别”中的相同

需要以下方面的帮助。 假设我们有一个数据帧:

dictionary ={'Category':['a','a','a','a','a','a','a','a','b','b','b','b','b','b','b'], 
'val1':[11,13,14,17,18,21,22,25,2,8,9,13,15,16,19],
'val2':[1,0,5,1,4,3,5,9,4,1,5,2,4,0,3]}

df=pd.DataFrame(dictionary)
“val1”总是在“类别”中的相同值内递增,即类别的第一行和最后一行是该类别的最小值和最大值。每个类别有太多的行,我想创建一个新的数据框,其中包含每个类别的最小值和最大值,并包含每个类别的等距行,例如5行(包括最小值和最大值)。 我认为numpy的linspace应该用于为每个类别创建一个值数组(例如
linspace(min,max,5)
),然后应该使用类似于excel的“lookup”函数的东西从df获取最接近的“val1”值。 或者也许还有其他更好的方法


非常感谢您的帮助。

这就是您需要的吗?使用
groupby
reindex

l=[]
for _, x in df.groupby('Category'):
    x.index=x['val1']
    y=x.reindex(np.linspace(x['val1'].min(), x['val1'].max(), 5),method='nearest')
    l.append(y)
pd.concat(l)
Out[330]: 
      Category  val1  val2
val1                      
11.00        a    11     1
14.50        a    14     5
18.00        a    18     4
21.50        a    22     5
25.00        a    25     9
2.00         b     2     4
6.25         b     8     1
10.50        b     9     5
14.75        b    15     4
19.00        b    19     3

到目前为止,您尝试了什么?我正在与linspace玩游戏,为每个类别创建一个for循环。但是,我无法继续循环…是的,这正是我想要的,它可以与小示例一起工作。然而,当我把它应用到最初的问题时,我得到了ValueError,说“不能用方法或限制重新索引非唯一索引”,你知道为什么会发生这种情况吗?关于代码的一个问题:“循环”中的“函数”是什么?这意味着Val1有重复,可以先使用<代码> df= df.DoppRePiple([类别','Val1′])/<代码>删除副本,如果这是你需要的,你介意考虑一下投票并接受它吗?