Я могу успешно применить ваш код и создать желаемый вывод, перебирая группы, а не используя apply
:
import pandas as pd
df = pd.read_csv('/Users/jeffmayse/Downloads/sample.csv')
df.set_index('timestamp', inplace=True)
def process_ssp(df_ssp):
sensor_name = df_ssp.iloc[0]['subsystem-sensor-parameter'] # to be used as column name
df_ssp.rename(columns = {
'value_raw': '%s_raw' % sensor_name,
'value_hrf': '%s_hrf' % sensor_name,
}, inplace = True)
df_ssp.drop('subsystem-sensor-parameter', axis='columns', inplace=True) # since this is the column I am grouping on I guess this isn't the right thing to do?
return df_ssp
groups = df.groupby('subsystem-sensor-parameter')
out = []
for name, group in groups:
try:
out.append(process_ssp(group))
except:
print(name)
pd.concat(out).shape
Out[7]: (16131, 114)
И на самом деле проблема заключается в apply
метод, поскольку ваша функция не нужна для выдачи ошибки:
df.groupby('subsystem-sensor-parameter', as_index=False).apply(lambda x: x)
также оценивается как ValueError: cannot reindex from a duplicate axis
.
Однако это утверждение оценивается какожидал:
df.reset_index(inplace=True)
df.groupby('subsystem-sensor-parameter', as_index=False).apply(process_ssp)
Out[22]:
nc-devices-alphasense_hrf ... wagman-uptime-uptime_raw
0 0 ... NaN
1 NaN ... NaN
2 NaN ... NaN
3 NaN ... NaN
...
Проблема в том, что у вас есть DatetimeIndex
с дублирующимися значениями..apply
пытается объединить наборы результатов вместе, но не уверен, как объединить индекс с дублирующимися значениями.По крайней мере, я верю, что это так.Сбросьте свой индекс и попробуйте снова.
Редактировать: чтобы расширить, вы часто видите эту ошибку при попытке переиндексировать DatetimeIndex, т. Е. У вас есть почасовой индекс и вы хотите преобразовать его во второй индекс разрешения или обычно заполняетев пропущенные часы.Вы используете переиндексацию, но она потерпит неудачу, если в вашем индексе есть повторяющиеся значения.Я думаю, это то, что происходит здесь: кадры данных, создаваемые применяемой функцией, имеют дублирующиеся значения индекса, и ошибка возникает из-за попытки вывести выходные данные путем вызова reindex для DatetimeIndex с дубликатами.Сброс индекса работает, потому что ваш индекс теперь все уникален, а столбец timestamp
не важен для этой операции.