Как извлечь выборку из pandas кадра данных, используя частоту строковых столбцов - PullRequest
0 голосов
/ 01 мая 2020

У меня есть pandas фрейм данных, который я хотел бы взять 100 выборок, взвешенных на основе того, сколько раз 'State' (который является столбцом str) отображается в исходном фрейме данных. Я попробовал ответ из этого поста: Использование Pandas для выборки DataFrame с использованием заданного c веса столбца

Затем я получил эту ошибку:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-32-0bec47c9e4f5> in <module>
      4 #group the claim data set
      5 # train_claim_g = train_claim.groupby(['policy', 'State']).agg({'target':'sum'}).reset_index()
----> 6 train_ex = train_claim.groupby('State', group_keys = False).apply(lambda g: g.sample(3 * len(g)/len(train_claim)))
      7 train_ex
      8 # train_claim_s = train_claim_g.sample(n=100, weights = 'State', random_state = 1)

~\AppData\Local\Continuum\anaconda3\envs\torch_env\lib\site-packages\pandas\core\groupby\groupby.py in apply(self, func, *args, **kwargs)
    733         with option_context("mode.chained_assignment", None):
    734             try:
--> 735                 result = self._python_apply_general(f)
    736             except TypeError:
    737                 # gh-20949

~\AppData\Local\Continuum\anaconda3\envs\torch_env\lib\site-packages\pandas\core\groupby\groupby.py in _python_apply_general(self, f)
    749 
    750     def _python_apply_general(self, f):
--> 751         keys, values, mutated = self.grouper.apply(f, self._selected_obj, self.axis)
    752 
    753         return self._wrap_applied_output(

~\AppData\Local\Continuum\anaconda3\envs\torch_env\lib\site-packages\pandas\core\groupby\ops.py in apply(self, f, data, axis)
    204             # group might be modified
    205             group_axes = group.axes
--> 206             res = f(group)
    207             if not _is_indexed_like(res, group_axes):
    208                 mutated = True

<ipython-input-32-0bec47c9e4f5> in <lambda>(g)
      4 #group the claim data set
      5 # train_claim_g = train_claim.groupby(['policy', 'State']).agg({'target':'sum'}).reset_index()
----> 6 train_ex = train_claim.groupby('State', group_keys = False).apply(lambda g: g.sample(3 * len(g)/len(train_claim)))
      7 train_ex
      8 # train_claim_s = train_claim_g.sample(n=100, weights = 'State', random_state = 1)

~\AppData\Local\Continuum\anaconda3\envs\torch_env\lib\site-packages\pandas\core\generic.py in sample(self, n, frac, replace, weights, random_state, axis)
   5047             )
   5048         elif n is not None and frac is None and n % 1 != 0:
-> 5049             raise ValueError("Only integers accepted as `n` values")
   5050         elif n is None and frac is not None:
   5051             n = int(round(frac * axis_length))

ValueError: Only integers accepted as `n` values

Игнорирование.

Я нашел ответ здесь: Случайная выборка Pandas Фрейм данных, основанный на распределении столбца

...