获取行a差异行b_1减去行b_2的位置最小

时间:2016-02-16 13:38:43

标签: python pandas

我有一个像这样的Pandas数据框:

a     b
1     4.5
1     5.1
2     6.2
2     6.4
3     7.1
3     3.2
4     0
4     0

对于每个'a'值,有两个数据帧行。我希望得到'a'最小值为abs(b1-b2)的值。编辑:另外,我想忽略两个'a'条目都有'b=0'的情况。

Pandas可以轻易实现吗?

1 个答案:

答案 0 :(得分:2)

IIUC然后你可以在'a'上groupby并调用diffabs来返回值对之间的绝对差异,然后可以使用{{3}获取索引}}:

In [127]:
df.loc[df.groupby('a')['b'].diff().abs().idxmin()]

Out[127]:
a    2.0
b    6.4
Name: 3, dtype: float64

中间步骤和输出是:

In [128]:
df.groupby('a')['b'].diff()

Out[128]:
0    NaN
1    0.6
2    NaN
3    0.2
4    NaN
5   -3.9
dtype: float64

In [129]:    
df.groupby('a')['b'].diff().abs()

Out[129]:
0    NaN
1    0.6
2    NaN
3    0.2
4    NaN
5    3.9
dtype: float64

In [130]:    
df.groupby('a')['b'].diff().abs().idxmin()

Out[130]:
3

修改

要处理您有2个0值的情况,您必须将其过滤掉,基本上执行双组:

In [157]:
df.loc[df[df['a'].isin(df.loc[df.groupby('a')['b'].diff().abs() > 0,'a'])].groupby('a')['b'].diff().abs().idxmin()]

Out[157]:
a    2.0
b    6.4
Name: 3, dtype: float64