如何访问熊猫数据框中的前几行数据?

时间:2019-05-10 11:33:52

标签: python pandas dataframe loc

我正在尝试访问前一行(或后退)以用作新列中的值。用枚举,迭代和iloc尝试了几种方法,但最终遇到相同的问题,它们使用最后一个值。使用以下代码:

df = pd.DataFrame({'values':(50.033,50.025,49.979,49.954,49.936,49.935,49.93)})

df['a']=df.diff()

def my_func_disch(x):
    if abs(x) >= 0 and abs(x) <= 0.009:
        for index,row in df.iterrows():
            eff_disch = row['values']  
    else:
        eff_disch = 'xxx'
    return eff_disch

df["b"] = df.a.apply(my_func_disch)

哪个产生:

   values      a      b
0  50.033    NaN    xxx
1  50.025 -0.008  49.93
2  49.979 -0.046    xxx
3  49.954 -0.025    xxx
4  49.936 -0.019    xxx
5  49.935  0.000  49.93
6  49.930 -0.005  49.93

我希望它产生:

   values      a      b
0  50.033    NaN    xxx
1  50.025 -0.008  50.033
2  49.979 -0.046    xxx
3  49.954 -0.025    xxx
4  49.936 -0.019    xxx
5  49.935  0.000  49.936
6  49.930 -0.005  49.935

1 个答案:

答案 0 :(得分:0)

请勿使用apply,而应使用矢量化的np.where,该方法更快,更易读:

df['b'] = np.where(df['a'].abs().between(0, 0.009, inclusive=True), df['values'].shift(), 'xxx')
#   values      a                  b
#0  50.033    NaN                xxx
#1  50.025 -0.008             50.033
#2  49.979 -0.046                xxx
#3  49.954 -0.025                xxx
#4  49.936 -0.019                xxx
#5  49.935  0.000  49.93600000000001
#6  49.930 -0.005             49.935

第一个参数指定何时执行操作(当absbetween某些值时),第二和第三个参数指定为True或{{1}时返回的内容} 分别。您需要值列shifted

您的解决方案不起作用,因为您总是在整个DataFrame上进行迭代(这几乎是不可能的),只是在对最后一行进行迭代之后才停止,因此返回最后一个值。