Как объединить серию в фрейм данных с именем серии на столбец в панд

#pandas

Вопрос:

У меня есть список pd.Series с различными индексами дат и именами как таковыми:

 trade_date
2007-01-03    0.049259
2007-01-04    0.047454
2007-01-05    0.057485
2007-01-08    0.059216
2007-01-09    0.055359
                ...   
2013-12-24    0.021048
2013-12-26    0.021671
2013-12-27    0.017898
2013-12-30    0.034071
2013-12-31    0.022301
Name: name1, Length: 1762, dtype: float64
 

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

Когда я пытаюсь pd.concat(list_data) , вместо этого я получаю одну действительно большую серию. Если я создам пустой фрейм данных и сделаю цикл над каждой серией в своем списке, я получу ошибку ValueError: cannot reindex from a duplicate axis Как я могу объединить их в игру с данными?

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

1. Можете ли вы привести минимальный пример, для которого вы воспроизводите ошибку?

2. Может быть, pd.concat(list_data, ось=1)?

Ответ №1:

Воспользуйся:

 pd.concat(map(lambda s: s.groupby(level=0).last(), list_data), axis=1)
 

более старый ответ

Вы должны использовать axis=1 в pandas.concat :

 pd.concat([series1, series2, series3], axis=1)
 

пример ваших данных (при условии, что это предоставленная серия):

 pd.concat([s, (s 1).rename('name2').iloc[5:]], axis=1)
 

выход:

                name1     name2
trade_date                    
2007-01-03  0.049259       NaN
2007-01-04  0.047454       NaN
2007-01-05  0.057485       NaN
2007-01-08  0.059216       NaN
2007-01-09  0.055359       NaN
2013-12-24  0.021048  1.021048
2013-12-26  0.021671  1.021671
2013-12-27  0.017898  1.017898
2013-12-30  0.034071  1.034071
2013-12-31  0.022301  1.022301
 

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

1. Я получаю следующую ошибку ValueError: cannot reindex from a duplicate axis

2. @pyCthon как? пожалуйста, приведите пример, это означает, что у вас где-то есть дубликат индекса. Кроме того, проверьте мои обновления.

3. Это обновление работает! Извините, я должен был уточнить, что индексы были разными датами в каждой серии

4. @pyCthon имейте в виду, что обновление удаляет дубликаты индексов! (сохраняет последний дубликат)

Ответ №2:

Вам нужно объединить столбцы (объединить ряды по горизонтали):

 pd.concat(list_data, axis=1)
 

Ответ №3:

Вероятно, у вас есть несколько строк с одним и тем же индексом даты на каждую Series .

Чтобы устранить эту проблему, вы можете сделать:

 for sr in list_data:
    sr = sr[sr.index.value_counts() > 1]
    if len(sr):
        print(f'[sr.name]')
        print(sr, end='n')
 

Если есть выход, вы не можете его использовать concat . Возможно, вам придется использовать merge параметр with how='outer' в качестве параметра.