Python 按输出打印部件
根据前面的问题,我有一个数据帧(mydf),格式如下:Python 按输出打印部件,python,pandas,Python,Pandas,根据前面的问题,我有一个数据帧(mydf),格式如下: Index Feature ID Stuff1 Stuff2 1 True 1 23 12 2 True 1 54 12 3 False 0 45 67 4 True 0 38 29 5 False 1 32 24 6 False 1 59 39 7
Index Feature ID Stuff1 Stuff2
1 True 1 23 12
2 True 1 54 12
3 False 0 45 67
4 True 0 38 29
5 False 1 32 24
6 False 1 59 39
7 True 0 37 32
8 False 0 76 65
9 False 1 32 12
10 True 0 23 15
..n True 1 21 99
借助我上一个问题的答案,我可以使用此方法根据每个“ID”(0或1)的“功能”的正确和错误百分比计算groupby的百分比
percentages = pd.DataFrame({'Percentage': mydf.groupby(('ID', 'Feature')).size() / (len(df)*100)})
这将打印为:
Percentage
ID Feature
0 False 20
True 30
1 False 30
True 20
Percentage
ID Feature
0 False 20
True 30
我还可以按“ID”分隔上面的相同方法,因此对于ID 0,我将使用以下方法:
percentages = pd.DataFrame({'Percentage': mydf[(mydf['ID'] == 0)].groupby(('ID','Feature')).size() / (len(df))*100})
这将打印为:
Percentage
ID Feature
0 False 20
True 30
1 False 30
True 20
Percentage
ID Feature
0 False 20
True 30
我的问题是如何进一步,只打印ID=0和Feature='False'的单个输出,这样我就可以在生成的Excel中的每个条件下打印到不同的工作表上(当我增加行号时,处理多个日志会更容易)
比如:
Percentage
ID Feature
0 False 20
然后分别为Feature='True':
Percentage
ID Feature
0 True 30
我尝试使用此方法,但得到了错误-TypeError:invalid type comparison
percentages = pd.DataFrame({'Percentage': mydf[(mydf['ID'] == 0)&(mydf['Feature'] == 'False')].groupby(('ID','Feature')).size() / (len(df)*100)})
您只需使用
百分比
结果df并将其索引到多索引df中即可:
In [81]:
percentages = pd.DataFrame({'Percentage': df.groupby(('ID', 'Feature')).size() / (len(df)*100)})
percentages
Out[81]:
Percentage
ID Feature
0 False 0.002
True 0.003
1 False 0.003
True 0.002
In [83]:
print(percentages.loc[(0,False)])
print(percentages.loc[(0,True)])
Percentage 0.002
Name: (0, False), dtype: float64
Percentage 0.003
Name: (0, True), dtype: float64
这里的语法使用元组索引到每个级别,这里(0,False)
索引ID0
,然后下一个值是级别1False
,依此类推
还有进一步的解释和示例代码
您可以使用get\u level\u values
获取索引值:
In [86]:
print(percentages.index.get_level_values(0))
print(percentages.index.get_level_values(1))
Int64Index([0, 0, 1, 1], dtype='int64', name='ID')
Index([False, True, False, True], dtype='object', name='Feature')
您只需在上面调用unique
,即可获得唯一值,并对其进行迭代:
In [87]:
for level_0 in percentages.index.get_level_values(0).unique():
for level_1 in percentages.index.get_level_values(1).unique():
print(percentages.loc[level_0, level_1])
Percentage 0.002
Name: (0, False), dtype: float64
Percentage 0.003
Name: (0, True), dtype: float64
Percentage 0.003
Name: (1, False), dtype: float64
Percentage 0.002
Name: (1, True), dtype: float64
以上假设所有ID都存在
True
/False
,否则您将引发keyrerror
我不确定代码是否会产生您所说的答案。你的/(len(df)*100)
看起来它把100放在了错误的地方(你用额外的因子100除以,而不是用分数乘以100得到一个百分比)。你是正确的DSM-我把右括号放在了错误的地方,我编辑了上面的代码,应该是(len(df))*100谢谢EdChum,你又把我从几个小时的混乱中救了出来!你的解决方案完全符合我的期望。