#python #pandas
#python #pandas
Вопрос:
У меня есть большой фрейм данных, который организован следующим образом:
Timestamp slot_ID counter1 Counter2
1552227371 1 0 1
1552227372 2 1 0
1552227373 3 1 1
... ... .. ...
1552229621 100 1 1
1552229622 1 1 0
1552229623 2 0 1
1552229624 3 1 1
... ... .. ...
1552229626 100 1 1
Я хочу разделить свой фрейм данных на основе slot_ID, чем вычислять сумму разных счетчиков для 100 slot_ID. Счетчик 1 и счетчик 2 постоянно имеют значение 0 или 1. Это означает, что сумма каждых 100 слотов меньше или равна 100.
def consecutive_groups(iterable, ordering=lambda x: x):
for k, g in groupby(enumerate(iterable), key=lambda x: x==100):
yield map(itemgetter(1), g)
grpsper100 = consecutive_groups(df_node['slot_ID'].index)
dfs = {i: df.iloc[list(j)] for i, j in enumerate(grpsper100, 1)}
for key, value in dfs.items():
#print(value['slot_ID'])
print(key)
print(value['Counter1'].sum())
print(value['Counter2'].sum())
Однако мой код не дает мне ожидаемого ответа:
key: 1
Counter1: 119083
Counter2: 117400
Пожалуйста, как исправить мой код?
Комментарии:
1. Что вам нужно, так это
dfs.loc[dfs['slot_ID'] == 100, dfs['counter1']].sum()
иdfs.loc[dfs['slot_ID'] == 100, dfs['counter2']].sum()
2. @JoshFriedlander спасибо за ваш ответ, но он выдает мне эту ошибку: AttributeError: объект ‘dict’ не имеет атрибута ‘loc’
3. Извините, не заметил, что у вас есть dict с таким именем и что ваш dataframe называется
df
. Итак, тогда этоdf.loc[df['slot_ID'] == 100, df['counter1']].sum()
4. Спасибо за вашу помощь, но это выдает мне ошибку памяти.