Какова обратная операция `.value_counts ()` в панде dataframe? - PullRequest
1 голос
/ 02 июля 2019

Начиная с неуникальной серии панд, можно подсчитать количество каждого уникального значения на .value_counts().

>> col = pd.Series([1.0, 1.0, 2.0, 3.0, 3.0, 3.0])

0    1.0
1    1.0
2    2.0
3    3.0
4    3.0
5    3.0
dtype: object

>> stat = col.value_counts()
>> stat
3.0    3
1.0    2
2.0    1
dtype: int64

Но, если начать с фрейма данных из двух столбцов, один для уникальных значений, а другой для числа вхождений. (stat в предыдущем примере). Как развернуть их в один столбец.

Поскольку я хотел бы рассчитать медиану, среднее и т. Д. Данных в таком кадре данных, я думаю, что описать один столбец гораздо проще, чем два. Или есть какой-нибудь метод для точного описания кадра данных «value_count» без расширения данных?

# turn `stat` into col ???

>> col.describe()
count    6.000000
mean     2.166667
std      0.983192
min      1.000000
25%      1.250000
50%      2.500000
75%      3.000000
max      3.000000 

добавить данные тестирования

>> df = pd.DataFrame({"Name": ["A", "B", "C"], "Value": [1,2,3], "Count": [2, 10, 2]})
>> df
  Name  Value  Count
0    A      1      2
1    B      2      5
2    C      3      2

df2 = _reverse_count(df)
>> df2
  Name  Value 
0    A      1 
1    A      1
2    B      2 
3    B      2
4    B      2  
5    B      2  
6    B      2  
7    B      2
8    C      3
9    C      3  

1 Ответ

3 голосов
/ 02 июля 2019

Вы можете использовать функцию repeat из numpy

import pandas as pd
import numpy as np
col = pd.Series([1.0, 1.0, 2.0, 3.0, 3.0, 3.0])
stats=col.value_counts()
pd.Series(np.repeat(stats.index,stats))
# 0    3.0
# 1    3.0
# 2    3.0
# 3    1.0
# 4    1.0
# 5    2.0
# dtype: float64

Обновление:

для нескольких столбцов, которые вы можете использовать

df.loc[df.index.repeat(df['Count'])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...