В примере с pandas вы можете иметь pandas.Series
, который имеет те же или похожие значения индекса, что и другое, которое вы намереваетесь объединить.Однако каждое значение индекса pandas.Series
должно быть уникальным.
т.е. len(ds.index) - len(ds.index.unique())
должно равняться 0
Ваш индекс в ds
имеет несколько одинаковых значений,Если вы хотите объединить на основе index
, неясно, как объединить эти индексы с другим pandas.Series
, поэтому вы получите ошибку.
Например, ваш код будет работать, если каждый ds
имеет уникальный индекс.
ds_list = []
dates = pd.date_range(start='1/1/2019', periods=7); values = np.arange(7)
dic_data = {'Col1' : [(dates[i], values[i]) for i in range(7)], 'Col2' : [(dates[i], values[i]*2) for i in range(7)]}
for name in dic_data.keys():
ds = pd.Series([dat[1] for dat in dic_data[name]], index=[dat[0] for dat in dic_data[name]], name=name)
ds_list.append(ds)
df = pd.concat(ds_list,axis=1,sort=False)
In [43]: df
Out[43]:
Col1 Col2
2019-01-01 0 0
2019-01-02 1 2
2019-01-03 2 4
2019-01-04 3 6
2019-01-05 4 8
2019-01-06 5 10
2019-01-07 6 12
Однако, если у вашего ds
есть дублированные значения индекса, он не будет:
dic_data = {'Col1' : [(dates[i % 7], values[i % 7]) for i in range(12)], 'Col2' : [(dates[i], values[i]*2) for i in range(7)]}
for name in dic_data.keys():
ds = pd.Series([dat[1] for dat in dic_data[name]], index=[dat[0] for dat in dic_data[name]], name=name)
ds_list.append(ds)
InvalidIndexError: Reindexing only valid with uniquely valued Index objects
Как исправление, я бы агрегировал метки временинапример, сделав groupby
, или вы хотите объединить эти дубликаты:
dic_data = {'Col1' : [(dates[i % 7], values[i % 7]) for i in range(12)], 'Col2' : [(dates[i], values[i]*2) for i in range(7)]}
for name in dic_data.keys():
ds = pd.Series([dat[1] for dat in dic_data[name]], index=[dat[0] for dat in dic_data[name]], name=name)
ds = ds.groupby(level=0).sum()
ds_list.append(ds)
Или вы можете просто удалить дубликаты, например, ds.drop_duplicates()
...