gpt4 book ai didi

python - 如何索引pandas Dataframe KeyError : False中的数字值

转载 作者:行者123 更新时间:2023-12-03 18:34:17 25 4
gpt4 key购买 nike

所以我试图在过滤后索引一个值以将其附加到列表中。到目前为止,这里是代码:

import pandas as pd
import numpy as np
arr_1 = np.array([7, 1, 6, 9, 2, 4])
arr_2 = np.array([5, 8, 9, 10, 2, 3])
arr_3 = np.array([1, 9, 3, 4, 5, 1])

dict_of_arrs = {
'arr' : [arr_1, arr_2, arr_3]
}
df = pd.DataFrame(dict_of_arrs)

true_list = []
false_list = []
filt = df.arr.apply(lambda x: np.diff(x)>0)
for i in filt:
for n in i:
if n==True:
true_list.append(df.arr[n])
else:
false_list.append(df.arr[n])

虽然我收到错误:
KeyError: False

我还通过执行 df.arr[i][n] 来建立索引,但正如预期的那样,这给了我错误:
IndexError: Boolean index has wrong length: 5 instead of 3

我想要做的是过滤掉我已经拥有的 True 或 False,然后我想将所有 True 值的原始编号附加到 true_list 并且与 False 相同。因此,当我执行 print(true_list) 时,输出是一个列表列表,每个列表只有 filt==True 的值,而 false_list 也是如此。谢谢你。

编辑:
预期输出应类似于:
print(true_list)
那么输出是:
[ 6, 9, 4]
[ 8, 9, 10, 3]
[ 9, 4, 5]

因为在每个列表中 filt 正在寻找以下值是否大于最后一个值。因此,那些为 True 的值将它们的 int 值添加到 true_list 中。对于 false_list,它看起来像:
[ 1, 2]
[2]
[3, 1]

谢谢

最佳答案

这与 @Scott Boston's answer 相同,但不使用 groupbyexplode

使用 np.diff 和 bool 索引。

import numpy as np

df.arr.map(lambda x:np.array(x)[1:][np.diff(x)>=0])
0 [6, 9, 4]
1 [8, 9, 10, 3]
2 [9, 4, 5]
Name: arr, dtype: object

df.arr.map(lambda x:np.array(x)[1:][np.diff(x)<0])
0 [1, 2]
1 [2]
2 [3, 1]
Name: arr, dtype: object
timeit 结果:
In [63]: %%timeit
...: dfe = df['arr'].explode()
...: grp = dfe.groupby(level=0).diff()
...: df_g = dfe[grp >= 0]
...: df_increasing = df_g.groupby(level=0).agg(list)
...:
...: df_l = dfe[grp < 0]
...: df_decreasing = df_l.groupby(level=0).agg(list)
...:
...:
7.16 ms ± 565 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [65]: %%timeit
...: df_x = df.arr.map(lambda x:np.array(x)[1:][np.diff(x)>=0])
...: df_y =df.arr.map(lambda x:np.array(x)[1:][np.diff(x)<0])
...:
...:
384 µs ± 5.37 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

关于python - 如何索引pandas Dataframe KeyError : False中的数字值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62227336/

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