Как одновременно объединить данные из нескольких столбцов, используя pandas / python?

#python #pandas #dataframe #bins

#python #pandas #dataframe #ячейки

Вопрос:

Я работаю с фреймом данных, который содержит 92 столбца и 200000 строк. Я хочу записать и подсчитать данные из каждого из этих столбцов и поместить их в новый фрейм данных для дальнейшего построения / анализа.

Я использую

 bins = [-800, -70, -60, -50, -40, -30, -20, -5, 0]
df['Depth.1'].value_counts(bins=bins, sort = False)
 

который успешно объединяет данные, но только для одного столбца за раз. Возможно ли сделать это для нескольких столбцов во фрейме данных и поместить их в новый фрейм данных?

Спасибо

Комментарии:

1. Как вы предлагаете справиться с ситуацией, когда 1 столбец помещает результат в ячейку 1, а следующий столбец помещает результат в ячейку 2?

2. Я не совсем уверен, понимаю ли я это. Но мне нужно применить общие ячейки для всех столбцов (для моей цели нормально, что интервал ячеек является общим для всех столбцов), и мне нравится анализировать результат, т.Е. подсчитывать значения для каждого интервала ячеек. Может ли это количество значений быть создано как новый фрейм данных?

Ответ №1:

вы можете использовать apply для выполнения одной и той же операции с каждым столбцом. попробуйте

 new_df = df.apply(lambda x: x.value_counts(bins=bins, sort=False))
 

В качестве примера, если все столбцы не будут объединены:

 #sample data
df = pd.DataFrame({'a':[3,6,2,7,3], 
                   'b':[2,1,5,8,9], 
                   'c':list('abcde')})
 

если вы выполните описанный выше метод, вы получите сообщение об ошибке, поскольку столбец имеет тип string . Таким образом, вы можете определить список столбцов и выполнить:

 list_cols = ['a','b'] #only the numerical columns
new_df = df[list_cols].apply(lambda x: x.value_counts(bins=[0,2,5,10], sort=False))
print(new_df)
               a  b
(-0.001, 2.0]  1  2
(2.0, 5.0]     2  1
(5.0, 10.0]    2  2
 

Комментарии:

1. Привет, спасибо за ваш ответ. Я попробовал предложенный метод, но он не сработал. Я получаю некоторую ошибку. Интересно, где именно мы приводим аргумент о выборе всех столбцов в вашей команде. Просто чтобы сообщить вам, что я новичок в python / pandas и готов учиться 🙂

2. Привет, спасибо, что объяснили на примере, теперь это действительно работает :). Однако у меня есть 92 столбца, для которых мне нужно применить эту операцию. Существует ли команда, с помощью которой мы можем выбрать все столбцы в фрейме данных, а не упоминать каждый из этих столбцов в списке. Например, list_cols = [‘a’, ‘b’, ‘c’ ….’92’]

3. @Omi вы можете получить все столбцы с list_cols = df.columns помощью , но если исходный ответ не сработал для вас, то при указании всех столбцов, подобных этому, произойдет та же ошибка. есть ли у вас где-нибудь в ваших данных какие-нибудь нечисловые данные?

4. Хорошо, я понимаю. У меня есть один столбец с нечисловыми данными. Итак, просто удалите его из файла CSV и снова прочитайте файл CSV, в котором есть только столбцы с числовыми значениями, и ваш предыдущий ответ также работает сейчас. Большое спасибо … ценю ваш быстрый ответ 🙂

5. ОК… Я действительно принял этот ответ. Пожалуйста, дайте мне знать, если есть что-то еще, что мне нужно сделать. Еще раз спасибо.