Вы можете вызвать cumsum
на выходе get_dummies
для интересующего столбца:
>>> pd.get_dummies(df["f2"])
a b c
0 1 0 0
1 1 0 0
2 0 1 0
3 0 0 1
>>> pd.get_dummies(df["f2"]).cumsum()
a b c
0 1 0 0
1 2 0 0
2 2 1 0
3 2 1 1
Если вы хотите эквивалент normalize=True
для value_counts, вы можете просто сделать это вручную:
>>> x = pd.get_dummies(df["f2"]).cumsum()
>>> x.div(x.sum(axis=1), axis=0)
a b c
0 1.000000 0.000000 0.00
1 1.000000 0.000000 0.00
2 0.666667 0.333333 0.00
3 0.500000 0.250000 0.25
Это, вероятно, лучший формат для дальнейшей обработки данных. В то время как вы могли бы принудительно перевести это в формат, похожий на диктовку, панды не имеют хорошей поддержки нескалярных элементов, и поэтому, помимо медлительности, это может привести к таинственным ошибкам. Это сказало:
>>> pd.get_dummies(df["f2"]).cumsum().apply(dict, axis=1)
0 {'a': 1, 'b': 0, 'c': 0}
1 {'a': 2, 'b': 0, 'c': 0}
2 {'a': 2, 'b': 1, 'c': 0}
3 {'a': 2, 'b': 1, 'c': 1}
dtype: object