Как добавить столбцы серии python pandas в dataframe?

#python #pandas #dataframe

#python #pandas #dataframe

Вопрос:

Я новичок в python pandas. У меня есть вопрос об обработке фрейма данных pandas. Я использую FRED (Federal Reserve Economic Data — ФРБ Сент-Луиса) python api для получения больших данных. Ниже приведены источники.

 df_poverty = fred.search(search_str, order_by='title')  # returns pandas dataframe
mask_poverty = df_poverty.title == search_str  
df_poverty = df_poverty.loc[mask_poverty,['id']] 
if not df_poverty.empty:
   df_poverty_tmp = fred.get_series(df_poverty.iloc[0].id)  # returns another pandas dataframe
   print('******************')
   print(df_poverty.index)
   print('==================')
   print(df_poverty.head())
   print('==================')
   print(df_poverty_tmp.index)
   print('==================')
   print(df_poverty_tmp.head())
  

Приведенные выше коды выводят следующие результаты.

 ******************
Index(['PPAAAR05000A156NCEN'], dtype='object', name='series id')
==================
                                      id
series id                               
PPAAAR05000A156NCEN  PPAAAR05000A156NCEN
==================
DatetimeIndex(['1989-01-01', '1990-01-01', '1991-01-01', '1992-01-01',
               '1993-01-01', '1994-01-01', '1995-01-01', '1996-01-01',
               '1997-01-01', '1998-01-01', '1999-01-01', '2000-01-01',
               '2001-01-01', '2002-01-01', '2003-01-01', '2004-01-01',
               '2005-01-01', '2006-01-01', '2007-01-01', '2008-01-01',
               '2009-01-01', '2010-01-01', '2011-01-01', '2012-01-01',
               '2013-01-01', '2014-01-01', '2015-01-01', '2016-01-01',
               '2017-01-01', '2018-01-01'],
              dtype='datetime64[ns]', freq=None)
==================
1989-01-01    17.9
1990-01-01     NaN
1991-01-01     NaN
1992-01-01     NaN
1993-01-01    18.9
dtype: float64
  

Мой целевой формат результатов — матрица объектов, как показано ниже, с индексацией временных рядов,

 1989-01-01     PPAAAR05000A156NCEN            17.9
1990-01-01     PPAAAR05000A156NCEN            NaN
1991-01-01     PPAAAR05000A156NCEN            NaN
1992-01-01     PPAAAR05000A156NCEN            NaN
1993-01-01     PPAAAR05000A156NCEN            18.9
  

Я создаю коды на python, но результаты не являются удовлетворительными,

 > df_poverty_tmp.append(df_poverty)

                        0                   id
1989-01-01 00:00:00  17.7                  NaN
1990-01-01 00:00:00   NaN                  NaN
1991-01-01 00:00:00   NaN                  NaN
1992-01-01 00:00:00   NaN                  NaN
1993-01-01 00:00:00  18.8                  NaN
1994-01-01 00:00:00   NaN                  NaN
1995-01-01 00:00:00  17.6                  NaN
1996-01-01 00:00:00  16.7                  NaN
1997-01-01 00:00:00  16.2                  NaN
1998-01-01 00:00:00  15.7                  NaN
PPAAAL01000A156NCEN   NaN  PPAAAL01000A156NCEN
  

Я хочу знать, как вставить значение серии pandas в середину столбцов фрейма данных pandas. Любой ответ будет благодарен.

== Часть обновления

Я добавляю несколько строк для вашего понимания.

 df_poverty = df_poverty.loc[mask_poverty,['id', 'title', 'frequency_short', 'seasonal_adjustment_short']]
print(df_poverty)
  

Строка печати показывает следующие результаты

                                       id  title   frequency_short seasonal_adjustment_short
series id                                                           
PPAAAK02000A156NCEN  PPAAAK02000A156NCEN  test1           M                 NSA
  

Тогда моя ожидаемая функция должна быть такой, как показано ниже,

 time                    id             title   frequency_short   value

1989-01-01     PPAAAR05000A156NCEN     test1         M            17.9
1990-01-01     PPAAAR05000A156NCEN     test1         M             NaN
1991-01-01     PPAAAR05000A156NCEN     test1         M             NaN
1992-01-01     PPAAAR05000A156NCEN     test1         M             NaN
1993-01-01     PPAAAR05000A156NCEN     test1         M             18.9
  

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

1. Не могли бы вы поделиться образцом dataframe с серией, которую вы хотите вставить, и ожидаемым результатом. Это будет полезно для понимания.

2. Спасибо за ваш ответ. Я добавил несколько строк в свой поток. Я надеюсь, что это будет полезно.

3. Пожалуйста, укажите выходные данные df.head().to_dict() и s.head().to_dict() где df находится ваш dataframe и s серия, которую вы хотите добавить. В противном случае вам будет сложно помочь.

Ответ №1:

Поскольку у вас есть повторяющиеся столбцы (два столбца с одинаковым содержимым), я рекомендую вам удалить один.

 df_poverty = df_poverty.drop("series id", 1)
df_poverty["time"] = DatetimeIndex.strftime(%Y-%m-%d)