Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 3.x Python如何计算数据帧中的布尔值并计算百分比_Python 3.x_Pandas - Fatal编程技术网

Python 3.x Python如何计算数据帧中的布尔值并计算百分比

Python 3.x Python如何计算数据帧中的布尔值并计算百分比,python-3.x,pandas,Python 3.x,Pandas,我想和熊猫一起做2件事,但我做不到 我有一个如下所示的数据帧: df = pd.DataFrame({'Name': {0: 'Eric', 1: 'Mattieu',2: 'Eric',3: 'Mattieu', 4: 'Mattieu',5: 'Eric',6:'Mattieu',7:'Franck',8:'Franck',9:'Jack',10:'Jack'}, 'Value': {0: False, 1:False,2:True,3:False, 4:True,5: True,6

我想和熊猫一起做2件事,但我做不到

我有一个如下所示的数据帧:

df = pd.DataFrame({'Name': {0: 'Eric', 1: 'Mattieu',2: 'Eric',3: 'Mattieu', 4: 'Mattieu',5: 'Eric',6:'Mattieu',7:'Franck',8:'Franck',9:'Jack',10:'Jack'},
    'Value': {0: False, 1:False,2:True,3:False, 4:True,5: True,6: False,7:True,8:True,9:False,10:False},
                  })

df=df.sort_values(["Name"])
df
    Name    Nbr True    Nbr False   Total Value   Mean (True/(False+True))
0   Eric    2           1           3             0.75
1   Franck  2           0           2             1.00
2   Jack    0           2           2             0.00
3   Mattieu 1           3           4             0.25
    Group by Total Value    Mean of grouped Total Value
0   2                       0.50
1   3                       0.75
2   4                       0.25
输出:

       Name  Value
0      Eric  False
2      Eric   True
5      Eric   True
7    Franck   True
8    Franck   True
9      Jack  False
10     Jack  False
1   Mattieu  False
3   Mattieu  False
4   Mattieu   True
6   Mattieu  False
制造1:我想知道每个名称的真值、假值、总值和真值的平均值,如下所示:

df = pd.DataFrame({'Name': {0: 'Eric', 1: 'Mattieu',2: 'Eric',3: 'Mattieu', 4: 'Mattieu',5: 'Eric',6:'Mattieu',7:'Franck',8:'Franck',9:'Jack',10:'Jack'},
    'Value': {0: False, 1:False,2:True,3:False, 4:True,5: True,6: False,7:True,8:True,9:False,10:False},
                  })

df=df.sort_values(["Name"])
df
    Name    Nbr True    Nbr False   Total Value   Mean (True/(False+True))
0   Eric    2           1           3             0.75
1   Franck  2           0           2             1.00
2   Jack    0           2           2             0.00
3   Mattieu 1           3           4             0.25
    Group by Total Value    Mean of grouped Total Value
0   2                       0.50
1   3                       0.75
2   4                       0.25
制造2:我想通过“平均值(真/(假+真))”列得到一组,按“总值”分组,如下所示:

df = pd.DataFrame({'Name': {0: 'Eric', 1: 'Mattieu',2: 'Eric',3: 'Mattieu', 4: 'Mattieu',5: 'Eric',6:'Mattieu',7:'Franck',8:'Franck',9:'Jack',10:'Jack'},
    'Value': {0: False, 1:False,2:True,3:False, 4:True,5: True,6: False,7:True,8:True,9:False,10:False},
                  })

df=df.sort_values(["Name"])
df
    Name    Nbr True    Nbr False   Total Value   Mean (True/(False+True))
0   Eric    2           1           3             0.75
1   Franck  2           0           2             1.00
2   Jack    0           2           2             0.00
3   Mattieu 1           3           4             0.25
    Group by Total Value    Mean of grouped Total Value
0   2                       0.50
1   3                       0.75
2   4                       0.25

提前感谢您的帮助

第一个可以通过
交叉表

s1 = pd.crosstab(df['Name'], df['Value'], margins=True).drop('All').assign(Mean = lambda x : x[True]/x['All'])
Out[266]: 
Value    False  True  All      Mean
Name                               
Eric         1     2    3  0.666667
Franck       0     2    2  1.000000
Jack         2     0    2  0.000000
Mattieu      3     1    4  0.250000
第二个数据帧使用
groupby

s2 = s1.groupby('All').apply(lambda x : sum(x[True])/sum(x['All'])).reset_index(name='Mean of ALL')
Out[274]: 
   All  Mean of ALL
0    2     0.500000
1    3     0.666667
2    4     0.250000

第一个可以通过
交叉表

s1 = pd.crosstab(df['Name'], df['Value'], margins=True).drop('All').assign(Mean = lambda x : x[True]/x['All'])
Out[266]: 
Value    False  True  All      Mean
Name                               
Eric         1     2    3  0.666667
Franck       0     2    2  1.000000
Jack         2     0    2  0.000000
Mattieu      3     1    4  0.250000
第二个数据帧使用
groupby

s2 = s1.groupby('All').apply(lambda x : sum(x[True])/sum(x['All'])).reset_index(name='Mean of ALL')
Out[274]: 
   All  Mean of ALL
0    2     0.500000
1    3     0.666667
2    4     0.250000