Python 按列分组,计算值在另一列中的出现次数并将这些数字除以
我有一个如下所示的数据帧:Python 按列分组,计算值在另一列中的出现次数并将这些数字除以,python,pandas,grouping,Python,Pandas,Grouping,我有一个如下所示的数据帧: data = pd.DataFrame({'id' : ['a1', 'a1', 'a1', 'a2','a2','a3','a3','a3'], 'label' : ['0','0','1','0','1','0','1','1']}) id number a1 2 a2 1 a3 0,5 我的目标是按id分组,并做一些算术运算: 要计算每个组中“0”和“1”的出现次数,请将每个数字加上1000,最后将这些数字除以对方
data = pd.DataFrame({'id' : ['a1', 'a1', 'a1', 'a2','a2','a3','a3','a3'],
'label' : ['0','0','1','0','1','0','1','1']})
id number
a1 2
a2 1
a3 0,5
我的目标是按id分组,并做一些算术运算:
要计算每个组中“0”和“1”的出现次数,请将每个数字加上1000,最后将这些数字除以对方。例如,对于组“a1”:“0”出现两次,“1”出现一次,然后,2*1000/1*1000=2
所需的数据帧应如下所示:
data = pd.DataFrame({'id' : ['a1', 'a1', 'a1', 'a2','a2','a3','a3','a3'],
'label' : ['0','0','1','0','1','0','1','1']})
id number
a1 2
a2 1
a3 0,5
这些问题对我帮助很大:
我尝试过不同的版本,但仍然没有达到预期的输出。
任何帮助都是非常感谢的。
groupby
然后value\u计数
,我们做pct\u更改
data.groupby('id').label.apply(lambda x : x.value_counts(sort=False).pct_change()+1).dropna().reset_index(level=0)
Out[405]:
id label
0 a1 2.0
0 a2 1.0
0 a3 0.5
或
groupby
然后value\u计数
,我们进行pct\u更改
data.groupby('id').label.apply(lambda x : x.value_counts(sort=False).pct_change()+1).dropna().reset_index(level=0)
Out[405]:
id label
0 a1 2.0
0 a2 1.0
0 a3 0.5
或
输出:
id
a1 2.0
a2 1.0
a3 0.5
Name: label, dtype: float64
输出:
id
a1 2.0
a2 1.0
a3 0.5
Name: label, dtype: float64
如果您的组中不存在
1
值,您可以使用collections.Counter
并明确定义所需的结果
from collections import Counter
def calculator(x):
c = Counter(x)
try:
return c['0'] / c['1']
except ZeroDivisionError:
return np.nan
res = data.groupby('id')['label'].apply(calculator)
id
a1 2.0
a2 1.0
a3 0.5
Name: label, dtype: float64
如果您的组中不存在
1
值,您可以使用collections.Counter
并明确定义所需的结果
from collections import Counter
def calculator(x):
c = Counter(x)
try:
return c['0'] / c['1']
except ZeroDivisionError:
return np.nan
res = data.groupby('id')['label'].apply(calculator)
id
a1 2.0
a2 1.0
a3 0.5
Name: label, dtype: float64
如果一个组不包含
'1'
,您将获得运行时警告
,但将获得np.inf
作为值。如果一个组不包含'1'
,您将获得运行时警告
,但将获得np.inf
作为值。