У меня есть 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 Фрейм данных, основанный на распределении столбца