Pandas — все столбцы в 1 новый столбец

#python #pandas

#python #pandas

Вопрос:

В моем фрейме данных есть 6 столбцов дат, которые я хочу, чтобы они отображались в 1 столбце КАДРА ДАННЫХ ЗДЕСЬ

Код для создания другого столбца выглядит следующим образом

 df['Mega'] = df['Mega'].append(df['RsWeeks','RsMonths','RsDays','PsWeeks','PsMonths','PsDays'])
 

я новичок в python и pandas, я хотел бы узнать больше, поэтому, пожалуйста, укажите мне источники, так как я действительно плохо разбираюсь в отладке, поскольку у меня нет опыта программирования.

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

1. Когда вы говорите, что хотите превратить их в один столбец, вы имеете в виду, что вам нужен список дат в каждой ячейке или строка всех дат? Вы хотите, чтобы даты отображались как объекты datetime или строки?

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

Ответ №1:

Документация Pandas — отличный источник хороших примеров. Нажмите здесь, чтобы перейти на страницу с большим количеством примеров и визуальных элементов.

Для вашего конкретного случая:

Мы создаем образец DataFrame :

 import pandas as pd

df = pd.DataFrame([
  {"RsWeeks": "2015-11-10", "RsMonths": "2016-08-01"},
  {"RsWeeks": "2015-11-11", "RsMonths": "2015-12-30"}
])
print("DataFrame preview:")
print(df)
 

Вывод:

 DataFrame preview:
      RsWeeks    RsMonths
0  2015-11-10  2016-08-01
1  2015-11-11  2015-12-30
 

Мы объединяем столбцы RsWeeks и RsMonths для создания Series :

 my_series = pd.concat([df["RsWeeks"], df["RsMonths"]], ignore_index=True)
print("nSeries preview:")
print(my_series)
 

Вывод:

 Series preview:
0    2015-11-10
1    2015-11-11
2    2016-08-01
3    2015-12-30
 

Редактировать

Если вам действительно нужно добавить новый Series столбец в качестве столбца к вашему DataFrame , вы можете сделать следующее:

 df2 = pd.DataFrame({"Mega": my_series})
df = pd.concat([df, df2], axis=1)
print("nDataFrame preview:")
print(df)
 

Вывод:

 DataFrame preview:
      RsWeeks    RsMonths        Mega
0  2015-11-10  2016-08-01  2015-11-10
1  2015-11-11  2015-12-30  2015-11-11
2         NaN         NaN  2016-08-01
3         NaN         NaN  2015-12-30
 

Ответ №2:

Данные:

 df = pd.DataFrame({"name" : 'Dav Las Oms'.split(),
                  'age' : [25, 50,  70]})
df['Name'] = list(['a', 'M', 'm'])
 

df:

   name  age Name
0  Dav   25    a
1  Las   50    M
2  Oms   70    m
 
 df = pd.DataFrame(df.astype(str).apply('|'.join, axis=1))
 

df:

           0
0  Dav|25|a
1  Las|50|M
2  Oms|70|m
 

Ответ №3:

Вы можете использовать pd.melt() , который делает ваш фрейм данных от широкого до длинного:

 df_reshaped = pd.melt(df, id_vars = ['id_1','id_2','id_3'], var_name = 'new_name', value_name = 'Mega')
 

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

1. Разве не нужно добавлять .str после имен столбцов?

2. Я всегда использую .astype(str) , будет ли это работать с just .str ?

3. Благодаря этому все мои столбцы попадают в одну строку. но моя цель — преобразовать все эти столбцы в независимые строки, чтобы я получил около 24 строк. потому что я хочу позже запустить filter для этого мега столбца

4. Да, это то, что, как я думал, вам нужно. Каков ваш идеальный результат?

5. screencast.com/t/bD0iLMdl я хочу, чтобы мои столбцы выглядели так в конце, чтобы я мог использовать filter в этом последнем столбце 254 строк для фильтрации результатов