Я пытаюсь обновить эту таблицу 1 (уровень I, уровень II и уровень III), используя pandas iloc или loc с набором данных, указанным ниже.Я открыт для лучшего способа, чем loc и iloc, если есть предложения.
Таблица 1

Пример 1
Если я хочу обновить таблицу с новой информацией для выбора 1102 для уровня оплаты 13 и уровня III, я бы использовал следующий код pd.loc:
jobseries = '1102'
result = df.loc[('3',jobseries),'13']
print (result)
14.0
Пример 2: Это тоже работает.
jobseries = '1102'
result = df.loc[('3',jobseries),'13'].sum()
print (result)
14
Однако проблема в том, когда мне нужно выбрать несколько индексов или несколько столбцов.
MULTIPLE ROWS
Теперь, если я хочу обновить Таблицу 1, Итого по всем уровням I, вместо того, чтобы делать какой-то тип df.isin, мне нужно сделать следующее:
Пример 3:
total = df.loc[('1',jobseries),'07'] + df.loc[('1',jobseries),'09'] + and so on...
print (total)
32
Это работает, но я полагаю, что в конечном итоге будет выбрано значение RuntimeWarning: неверное, встречающееся в long_scalars.Так что это не лучший способ сделать это.Любые рекомендации?
НЕСКОЛЬКО КОЛОНН
Теперь, если я хочу обновить Таблицу 1, # сертификаты для Уровня I, Уровня II и Уровня III, а также для любого данного классауровень, я не могу понять код.Я пробовал следующее, но его выбрасывание ключевой ошибки.Я пробовал несколько способов сделать это и до сих пор не могу понять:
Пример 4:
jobseries = '1102'
result = df.loc[('1','2','3',jobseries),'All']
print (result)
KeyError: "None of [[('1', '2', '3', '1102')]] are in the [index]"
Это странно, потому чтоесли я проверяю свой индекс, keyError смущает меня.
df.index:
MultiIndex(levels=[['1', '2', '3', 'All'], ['', '0301', '0341', '0342', '0343', '0501', '0560', '0810', '0850', '1101', '1102', '1105', '1106', '1109', '1145', '1146', '1170', '1410']],
labels=[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3], [2, 3, 4, 6, 7, 9, 10, 11, 12, 13, 16, 17, 2, 8, 9, 10, 11, 1, 3, 4, 5, 9, 10, 11, 14, 15, 16, 0]],
names=['Level', 'JobSeries'])
Я также пробовал df.xs:
Пример 5:
jobseries = '1102'
result = df.xs(jobseries, level=1)
print (result)
01 07 08 09 11 12 13 14 15 All
Level
1 1.0 0.0 0.0 9.0 8.0 9.0 6.0 0.0 0.0 15
2 0.0 0.0 0.0 4.0 6.0 12.0 6.0 1.0 0.0 13
3 1.0 0.0 0.0 0.0 1.0 11.0 14.0 9.0 3.0 14
ИЗМЕНЕНИЯ В СТРОКАХ ИЛИ КОЛОННАХ
Другая проблема состоит в том, что если набор данных изменяется, а индекс или строки изменяют pd.loc и pd.iloc выдаетключевая ошибка.Есть ли что-нибудь вокруг этого?
df:
01 07 08 09 11 12 13 14 15 All
Level JobSeries
1 0341 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1
0342 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1
0343 0.0 0.0 0.0 0.0 0.0 2.0 0.0 0.0 0.0 2
0560 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1
0810 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1
1101 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1
1102 1.0 0.0 0.0 9.0 8.0 9.0 6.0 0.0 0.0 15
1105 0.0 7.0 3.0 5.0 0.0 0.0 0.0 0.0 0.0 9
1106 0.0 2.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2
1109 0.0 0.0 0.0 0.0 2.0 0.0 0.0 0.0 0.0 2
1170 0.0 0.0 0.0 0.0 1.0 2.0 0.0 0.0 0.0 3
1410 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 1
2 0341 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 1
0850 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 1
1101 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 2
1102 0.0 0.0 0.0 4.0 6.0 12.0 6.0 1.0 0.0 13
1105 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1
3 0301 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1
0342 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1
0343 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1
0501 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 1
1101 0.0 0.0 0.0 0.0 0.0 0.0 2.0 1.0 0.0 2
1102 1.0 0.0 0.0 0.0 1.0 11.0 14.0 9.0 3.0 14
1105 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1
1145 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 1
1146 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1
1170 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 2
All 2.0 8.0 4.0 11.0 11.0 14.0 15.0 9.0 4.0 17
Ссылка:
pd.loc: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.loc.html
pd.xs: https://pandas.pydata.org/pandas-docs/version/0.22/generated/pandas.DataFrame.xs.html
pd.iloc: https://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-integer