【问题标题】:How to access data of previous rows in pandas dataframe?如何访问熊猫数据框中前几行的数据?
【发布时间】:2019-09-28 07:41:26
【问题描述】:

我正在尝试访问前一行(或后一行)以用作新列中的值。尝试了几种使用 enumerate、iterrows 和 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

【问题讨论】:

标签: python pandas dataframe


【解决方案1】:

不要使用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 某些值时),第二个和第三个参数分别指定当它是TrueFalse 时要返回什么。你想要值列shifted

您的解决方案不起作用,因为您总是遍历整个 DataFrame(这几乎不是要走的路),仅在遍历最后一行后才停止,因此返回最后一个值。

【讨论】:

  • 完美快速的回答。但是,对于进一步的计算,我仍然想在 ['a'] 列中计算特定值,有没有合适的方法来做到这一点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
  • 2020-04-26
  • 1970-01-01
  • 1970-01-01
  • 2022-12-13
  • 1970-01-01
相关资源
最近更新 更多