расширение панд (накопительное) value_counts - PullRequest
0 голосов
/ 27 апреля 2018

Есть ли способ получить значения до каждой строки в кадре данных?

|f1|f2|
-------
v1 | a  value_counts -> {a:1}
v2 | a  value_counts -> {a:2}
v3 | b  value_counts -> {a:2,b:1}
v4 | c  value_counts -> {c:1,a:2,b:1}

1 Ответ

0 голосов
/ 27 апреля 2018

Вы можете вызвать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...