Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按列分组,计算值在另一列中的出现次数并将这些数字除以_Python_Pandas_Grouping - Fatal编程技术网

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
作为值。