gpt4 book ai didi

python - 如何获取数据框列中数字周围的值?

转载 作者:太空宇宙 更新时间:2023-11-04 05:07:31 25 4
gpt4 key购买 nike

假设以下示例 DataFrame:

df = pd.DataFrame([10,15,9,3,5,6,7,12,9], columns = ['numbers']).sort_values(by = 'numbers')


print df

numbers
3 3
4 5
5 6
6 7
2 9
8 9
0 10
7 12
1 15

对于 numbers 列中的每个值,我想获取该值及其周围的 4 数字。这样,只要有可能,我就希望比当前值小 2 个数字,大 2 个数字。如果不可能,我想获取小于该值的 k 个数和大于该值的 n 个数,这样 k + n = 4

循环我的例子,第一个值是3。没有小于3的数,所以输出为大于3的4个数:
3,5,6,7,9

期望的输出:输出列具有所需的输出,对应于数字列中的每个输入。 (我用引号来突出当前值)

   numbers  Output
3 3 '3' ,5,6,7,9
4 5 3, '5' ,6,7,9
5 6 3,5, '6' ,7,9
6 7 5,6, '7' ,9,9
2 9 6,7, '9' ,9,10
8 9 .
0 10 .
7 12 .
1 15 9,9,10,12, '15'

最佳答案

设置

df = pd.DataFrame([10,15,9,3,5,6,7,12,9], columns = ['numbers']).sort_values(by = 'numbers')

解决方案

#reset index so it's sorted
df.reset_index(inplace=True)

#build reference index lists
start = [0,1]+[2]*(len(df)-4)+[3,4]
end = start[::-1]

#Extract elements based on the start and end reference index.
df['output'] = df.apply(lambda x: sum([df.iloc[x.name-start[x.name]:x.name]['numbers'].tolist(),
[x['numbers']],df.iloc[x.name+1:x.name+end[x.name]+1]['numbers'].tolist()],[]), axis=1)

df
Out[610]:
index numbers output
0 3 3 [3, 5, 6, 7, 9]
1 4 5 [3, 5, 6, 7, 9]
2 5 6 [3, 5, 6, 7, 9]
3 6 7 [5, 6, 7, 9, 9]
4 2 9 [6, 7, 9, 9, 10]
5 8 9 [7, 9, 9, 10, 12]
6 0 10 [9, 9, 10, 12, 15]
7 7 12 [9, 9, 10, 12, 15]
8 1 15 [9, 9, 10, 12, 15]

关于python - 如何获取数据框列中数字周围的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44007816/

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