У меня есть панд DataFrame (названная «df1») со следующей структурой (хотя у меня есть много месяцев ежедневных данных):Панда: сохранение даты, чтобы при использовании GroupBy или сводной таблице
date WeightedReturn
0 15/07/2015 0.005128
1 15/07/2015 0.002844
2 15/07/2015 0.003055
3 15/07/2015 -0.001481
4 15/07/2015 -0.000741
5 15/07/2015 -0.000741
6 16/07/2015 -0.004253
7 16/07/2015 -0.001712
8 16/07/2015 -0.001712
9 21/07/2015 -0.000178
10 21/07/2015 -0.000089
11 21/07/2015 -0.00008
и I хочу создать новую DataFrame от этого, который действует в качестве сводной таблицы и сливает поля даты и суммы, взвешенные возвращения для конкретной даты, чтобы получить что-то вроде этого:
date WeightedReturn
0 15/07/2015 0.00806425
1 16/07/2015 -0.007676
2 21/07/2015 -0.000356
Я попытался с помощью «GroupBy функции»:
df2 = df1.groupby('date').sum()
Это (вроде) работает, но выход сортирует дату неправильно следующим образом:
WeightedReturn
date
01/09/2015 0.004803
02/09/2015 0.005144
03/08/2015 -0.000120
03/09/2015 -0.025164
04/08/2015 0.003956
04/09/2015 0.008942
05/08/2015 -0.01323
Который, как вы можете видеть не в хронологическом порядке.
Поэтому я попытался использовать функцию сводной таблицы, но я очень смущен, прочитав документацию относительно ее использования.
Я попытался:
df2 = pandas.pivot_table(df1, values="Weighted Return", index="date",aggfunc=np.sum)
Я получаю сообщение об ошибке:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\pandas\tools\pivot.py", line 147, in pivot_table
table = table[values[0]]
File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 1791, in __getitem__
return self._getitem_column(key)
File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 1798, in _getitem_column
return self._get_item_cache(key)
File "C:\Python27\lib\site-packages\pandas\core\generic.py", line 1084, in _get_item_cache
values = self._data.get(item)
File "C:\Python27\lib\site-packages\pandas\core\internals.py", line 2851, in get
loc = self.items.get_loc(item)
File "C:\Python27\lib\site-packages\pandas\core\index.py", line 1578, in get_loc
return self._engine.get_loc(_values_from_object(key))
File "pandas\index.pyx", line 134, in pandas.index.IndexEngine.get_loc (pandas\index.c:3811)
File "pandas\index.pyx", line 154, in pandas.index.IndexEngine.get_loc (pandas\index.c:3691)
File "pandas\hashtable.pyx", line 697, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12336)
File "pandas\hashtable.pyx", line 705, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12287)
KeyError: 'Weighted Return'
Может некоторые молодчина указать, где я неправильно, пожалуйста?
Что случилось с начальной группой? Затем просто сортируйте по индексу. Не думайте, что вам нужен свод. (Ваш стержень по тому, как указано имя «Weighted Return» с пробелами, в то время как ваш df не имел пробелов, объясняя ошибку ключа) – ako
Также похоже, что ваша дата - это строка, приводящая к буквенно-цифровой сортировке. – ako