#python-3.x #pandas #numpy #pandas-groupby
Вопрос:
У меня есть один фрейм данных с двумя столбцами, A и B . сначала мне нужно сделать пустые контейнеры с шагом 1 от 1 до 11 , (1,2),(2,3)….(10,11). затем проверьте из исходного кадра данных, если значение столбца B больше 3, затем получите значение столбца » A » 2 строки до того, как столбец B будет больше 3.
Here is example dataframe :
df=pd.DataFrame({'A':[1,8.5,5.2,7,8,9,0,4,5,6],'B':[1,2,2,2,3.1,3.2,3,2,1,2]})
Required output 1:
df_out1=pd.DataFrame({'Value_A':[8.5,5.2]})
Required_output_2:
df_output2:
Bins count
(1 2) 0
(2,3) 0
(3,4) 0
(4,5) 0
(5,6) 1
(6,7) 0
(7,8) 0
(8,9) 1
(9,10) 0
(10,11) 0
Комментарии:
1. был ли какой-то код, который вы попробовали и потерпели неудачу?
2. @sammywemmy до сих пор не нашел подвоха
Ответ №1:
Вы можете индексировать сдвинутый ряд, чтобы получить две строки до того, как » A » удовлетворит некоторым условиям, таким как
out1 = df['A'].shift(3)[df['B'] > 3]
То, что вы хотите сделать с ячейками, называется гистограммой. Вы можете легко сделать это с помощью numpy, например
count, bin_edges = np.histogram(out1, bins=[i for i in range(1, 12)])
out2 = pd.DataFrame({'bin_lo': bin_edges[:-1], 'bin_hi': bin_edges[1:], 'count': count})
Здесь «bin_lo» и «bin_hi» являются нижней и верхней границами ячеек.