使用pandas

时间:2017-11-27 16:51:03

标签: python pandas

对于此数据框:

columns = ['A','B', 'C']
data = np.array([[1,2,2] , [4,5,4], [7,8,18]])
df2 = pd.DataFrame(data,columns=columns)
df2['C']

如果列C的连续行之间的差值<= 2,则应返回前一行和当前行。因此,我尝试过滤掉前一行与之差异的行。 2。

所以期望返回这些数组值:

    [1,2,2] 

    [4,5,4]

    [7,8,18]

我尝试使用shift函数实现此功能:

df2[(df2.A - df2.shift(1).A >= 2)]

结果是:

    A   B   C
1   4   5   4
2   7   8   18

我认为需要对每一行应用函数才能实现这个目标吗?

更新:

替代用例:

columns = ['A','B', 'C']
data = np.array([[1,2,2] , [2,5,3], [7,8,16]])
df2 = pd.DataFrame(data,columns=columns)
df2[df2.A.diff().shift(-1) >= 2]

返回的是:

    A   B   C
1   2   5   3

但期待

    A   B   C
1   2   5   3
1   7   8   16

所以在这种情况下,期望下一行和当前行返回为2&amp;之间的差异。 8英寸 2 5 3&amp; 8 8 18是&gt; 2

更新2:

边缘情况:如果要比较的最后一个值是&lt; 2然后忽略该行

columns = ['A','B', 'C']
data = np.array([[2,2,2] , [3,5,3], [5,8,16], [6,8,16]])
df2 = pd.DataFrame(data,columns=columns)

df2[df2.A.diff().shift(-1).ffill() >= 2]

返回:

A   B   C
1   3   5   3

1 个答案:

答案 0 :(得分:1)

我认为您需要diff shiftval = something_from_dic return val 替换为NaN

ffill