#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
У меня есть фрейм данных pandas (фактический набор данных намного больше и содержит числа от 1 до 50):
date main N1 N2 N3 N4 N5
0 2020-09-18 7-12-14-40-42 7 12 14 40 42
1 2020-09-11 2-5-24-43-45 2 5 24 43 45
2 2020-09-04 5-23-28-38-49 5 23 28 38 49
3 2020-08-28 8-11-22-38-41 8 11 22 38 41
4 2020-08-21 26-27-30-46-49 26 27 30 46 49
Я хочу вернуть индекс строки для первого вхождения каждого числа. До сих пор единственный способ, которым я смог добиться этого, — это «вручную» с помощью
lotteryData.loc[(lotteryData.N5==1)].head(49)
который в этом примере дает номер индекса строки 2. Это, очевидно, очень неуклюже и вообще не использует возможности фрейма данных Pandas. Есть ли способ перебора списка в формате 5-23-28-38-49 напрямую для сбора этой информации или способ перебора столбцов, чтобы найти первое вхождение всех чисел от 1 до 50
Комментарии:
1. Можете ли вы показать ожидаемый результат?
2. В идеале я хочу новый фрейм данных с номером и индексом строки в качестве значения, например, 49 и 2 в приведенном выше примере (индекс в этом наборе данных фактически отражает недели). приведенный выше пример с использованием loc выводит строку с индексом
3. Для каждого столбца; сгруппируйте по
Series(np.arrange(1,51))
, получите индекс первого элемента в каждой группе. Вам нужно первое вхождение числа в любом из столбцов или первое вхождение в каждом столбце?4. индекс первого вхождения числа в любом из столбцов
Ответ №1:
Мы можем выполнить stack
drop_duplicates
out = df.loc[:,'N2':].stack().drop_duplicates()
0 N2 12
N3 14
N4 40
N5 42
1 N2 5
N3 24
N4 43
N5 45
2 N2 23
N3 28
N4 38
N5 49
3 N2 11
N3 22
N5 41
4 N2 27
N3 30
N4 46
dtype: int64
Комментарии:
1. Спасибо. Теперь это отлично сработало, чтобы перевести его в формат, который я хотел бы. Мне нужно будет прочитать функциональность stack() и drop_duplicates(), чтобы понять это правильно. Могу ли я спросить, как получить число и индекс в новый фрейм данных? Хотя вывод понятен, я не уверен, как использовать его в фрейме данных