gpt4 book ai didi

python - 如何访问 pandas 数据框中前几行的数据?

转载 作者:太空宇宙 更新时间:2023-11-03 20:54:57 25 4
gpt4 key购买 nike

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

最佳答案

不要使用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(这几乎永远不是可行的方法),仅在迭代最后一行后停止,因此返回最后一个值。

关于python - 如何访问 pandas 数据框中前几行的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56076878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com