请寻求以下帮助。 假设我们有一个数据帧:
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。
或许还有其他一些更好的方法......
非常感谢你的帮助。
答案 0 :(得分:1)
这是你需要的吗?使用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