减少数据帧行和查找

时间:2018-05-31 00:08:22

标签: 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'总是在“类别”中的相同值内增加,即类别的第一行和最后一行是该类别的最小值和最大值。每个类别的行数太多,我想创建一个新的数据框,其中包含每个类别的 min max 值,并且包含相等的间距,例如每个类别包含5行(包括最小值和最大值)。 我认为numpy的 linspace 应该用于为每个类别创建一个值数组(例如linspace(min, max, 5)),然后类似于excel' lookup&# 39;函数应该用于获得最接近的值' val1'来自df。 或许还有其他一些更好的方法......

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

这是你需要的吗?使用groupbyreindex

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