Если ваш словарь имеет только один вложенный уровень и все значения являются числами, вы можете сгладить его следующим образом:
data = {k: sum(v.values()) if type(v) == dict else v for k, v in data.items()}
Если у вас может быть несколько уровней, для суммирования вложенных значений можно использовать короткую функцию:
import pandas as pd
def nested_itemsum(inp):
total = 0
if type(inp) == dict:
total = sum(nested_itemsum(v) for v in inp.values())
else:
total += inp
return total
data = {'c1' : 10, 'c2' : {'r1' : 1, 'r2' : 2}}
data = {k: nested_itemsum(v) for k, v in data.items()}
s = pd.Series(data)
print(s)
data = {'c1' : 10, 'c2' : {'r1' : {'x1': 5, 'x2': 10}, 'r2' : 2}}
data = {k: nested_itemsum(v) for k, v in data.items()}
s = pd.Series(data)
print(s)
Это печатает:
c1 10
c2 3
dtype: int64
c1 10
c2 17
dtype: int64
Как и ожидалось.
Если вы не хотите изменять входные данные, вы можете применить их к создаваемой серии следующим образом:
data = {'c1' : 10, 'c2' : {'r1' : 1, 'r2' : 2}}
s = pd.Series(data)
s = s.apply(nested_itemsum)
и получите тот же результат.