агрегация с индексами, отсутствующими в кадре данных

Это просто означает, что вы не можете повторно назначить свою ссылку. Попытка сделать что-то вроде приведенного ниже приведет к ошибке компилятора.

final List<String> list = new ArrayList<String>();

list = new LinkedList<String>();
     ^
     Compiler error here

Если вам действительно нужен неизменный список, вы должны использовать метод Collections.unmodifiableList().

2
задан HappyPy 27 February 2019 в 14:36
поделиться

2 ответа

Изменить для обновленного вопроса:

df.groupby('z').agg({'x':'sum','y':lambda r: r.reindex(i).sum()})

Вывод:

    x   y
z        
a   6   7
b  15  22

Используйте reindex, чтобы выбрать только эти индексы из i, затем dropna, чтобы удалить все эти наны. из-за того, что индексы в я не в дф. Затем groupyby и agg:

df.reindex(i).dropna(how='all').groupby('z').agg({'y':'sum'})

или, вам действительно не нужно падать:

df.reindex(i).groupby('z').agg({'y':'sum'})

Вывод:

      y
z      
a   7.0
b  22.0
0
ответ дан Scott Boston 27 February 2019 в 14:36
поделиться

Используйте intersection с df.index и i для получения только совпадающих значений, а затем обрабатывает данные как нужно:

print (df.loc[df.index.intersection(i)])
   x   y  z
0  1   7  a
3  4  10  b
5  6  12  b

df = df.loc[df.index.intersection(i)].groupby('z').agg({'y':'sum'})
#comment alternative
#df = df.loc[df.index.isin(i)].groupby('z').agg({'y':'sum'})
print (df)
    y
z    
a   7
b  22

РЕДАКТИРОВАТЬ:

df1 = df.groupby('z').aggregate({'x':sum, 'y': lambda x: sum(x.loc[x.index.intersection(i)])})
#comment alternative
#df1 = df.groupby('z').aggregate({'x':sum, 'y': lambda x: sum(x.loc[x.index.isin(i)])})
print (df1)
    x   y
z        
a   6   7
b  15  22
0
ответ дан jezrael 27 February 2019 в 14:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: