#python #list #dataframe #multiple-columns
Вопрос:
Я новичок в python и связанных с ним библиотеках и самостоятельно копаюсь в лесу синтаксиса, типов данных и т. Д. Я был бы очень признателен за любые советы по следующей проблеме: я пытаюсь выбрать значения из нескольких столбцов («Числа» и «Числы2» в примере ниже) в фрейме данных на основе значения в одном столбце («Буквы»), а затем объединить значения из разных столбцов в один список, чтобы я мог выполнить статистический анализ объединенных значений. После определенного количества проб и ошибок у меня есть следующее, которое, кажется, работает…но кажется немного неуклюжим. Есть ли лучший способ?!
Большое спасибо!
Letters = ["A","B", "C", "C", "D", "D", "D"]
Numbers =[1,1,1,2,1,2,3]
Numbers2 =[10,10,10,20,10,20,30]
test_dict={"Letter":Letters, "Number":Numbers, "Number2":Numbers2}
test=pd.DataFrame(test_dict)
numbers_by_letters =[]
for unique_letter in test["Letter"].unique():
numbers_by_letter =[]
for col in range (1, 3) :
number_by_letter=test[test["Letter"] == unique_letter].iloc[:,col]
numbers_by_letter.extend(number_by_letter)
numbers_by_letters.append(numbers_by_letter)
print (numbers_by_letters)
Результат, который я получаю, показан ниже, и я думаю, что хочу этого!
[ [1, 10], [1, 10], [1, 2, 10, 20], [1, 2, 3, 10, 20, 30]]
Комментарии:
1. Можете ли вы описать, как именно вы хотите преобразовать входные данные в выходные? Это трудно понять из вашего кода.
2. Не уверен, что знаю, как ответить на этот вопрос! Входные значения во фрейме данных содержат значения с плавающей точкой, а выходной список списков, показанный внизу, имеет вывод в нужной мне форме. т. е. для каждой уникальной записи в столбце «Буквы» у меня теперь есть простой список значений, связанных с этой записью, скомпилированный из разных столбцов. Это та информация, которая вам нужна? Если нет, объясните медленно, и я попробую и насвер… Спасибо!
Ответ №1:
print(
test.groupby("Letter")
.apply(lambda x: sorted(x[["Number", "Number2"]].to_numpy().flatten()))
.to_list()
)
С принтами:
[[1, 10], [1, 10], [1, 2, 10, 20], [1, 2, 3, 10, 20, 30]]
Комментарии:
1. Круто — спасибо! Ты выводишь меня из моей глубины…. В моей реальной ситуации количество столбцов, из которых я делаю выборку, является переменной, определенной ранее в коде, поэтому я настроил ее со структурой «col в диапазоне». Можно ли изменить ваше решение так, чтобы количество столбцов менялось?
2. @MontagnaBlue Вы можете сделать
.apply(lambda x: sorted(x.iloc[:, 0:2].to_numpy().flatten()))
примечание.iloc[:, 0:2]
, чтобы указать диапазон столбцов.3. Спасибо — это здорово!