Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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 使用pandas筛选并查找总计数和百分比_Python_Pandas - Fatal编程技术网

Python 使用pandas筛选并查找总计数和百分比

Python 使用pandas筛选并查找总计数和百分比,python,pandas,Python,Pandas,这就是我的数据表的样子 我必须按域筛选,然后找到“课程1完成”状态,如 1.完成百分比 2.未完成项目的百分比 3.不需要的百分比等 并使用plotly将其绘制为嵌套条形图 我尝试使用for循环并尝试了上面的场景,但是我无法实现它,我不确定我会错在哪里 仅打印“域A”的详细信息,而不打印其余信息 我的代码: import pandas as pd import plotly.graph_objects as go from plotly.graph_objs import Pie, Layou

这就是我的数据表的样子

我必须按域筛选,然后找到“课程1完成”状态,如 1.完成百分比 2.未完成项目的百分比 3.不需要的百分比等

并使用plotly将其绘制为嵌套条形图

我尝试使用for循环并尝试了上面的场景,但是我无法实现它,我不确定我会错在哪里

仅打印“域A”的详细信息,而不打印其余信息

我的代码:

import pandas as pd
import plotly.graph_objects as go
from plotly.graph_objs import Pie, Layout,Figure
import plotly.offline as py
df = pd.read_excel('data/master.xlsx',sheet_name=1)
ds = df['Course1 completion']
df['Domain'].fillna('No Specific Domain',inplace=True)
df['Course1 completion'].fillna('Not Applicable',inplace=True)
portfolios=df['Domain'].unique().tolist()
print(portfolios)


for portfolio in portfolios:
    df=df[df['Domain']==portfolio]
    ds=df['Course1 completion']
    count = ds.value_counts()
    status = ds.value_counts(normalize=True).mul(100).round(2)
    print('Status of portfolio : '+portfolio)
    print(status)
    print()
    print('*********************************************')
我的输出:

import pandas as pd
import plotly.graph_objects as go
from plotly.graph_objs import Pie, Layout,Figure
import plotly.offline as py
df = pd.read_excel('data/master.xlsx',sheet_name=1)
ds = df['Course1 completion']
df['Domain'].fillna('No Specific Domain',inplace=True)
df['Course1 completion'].fillna('Not Applicable',inplace=True)
portfolios=df['Domain'].unique().tolist()
print(portfolios)


for portfolio in portfolios:
    df=df[df['Domain']==portfolio]
    ds=df['Course1 completion']
    count = ds.value_counts()
    status = ds.value_counts(normalize=True).mul(100).round(2)
    print('Status of portfolio : '+portfolio)
    print(status)
    print()
    print('*********************************************')


非常感谢您对此提供的任何帮助。谢谢

在语句
df=df[df['Domain']==portfolio]
中,除了第一次搜索之外,每次迭代都会搜索其他显然不再存在的域。 做一些类似于:

for portfolio in portfolios:
    df_temp=df.loc[df['Domain']==portfolio].copy()
    ds=df_temp['Course1 completion']
    count = ds.value_counts()
    status = ds.value_counts(normalize=True).mul(100).round(2)
    print('Status of portfolio : '+portfolio)
    print(status)
    print()
    print('*********************************************')
    del df_temp
代码
df_temp=df.loc[df['Domain']==portfolio].copy()
将允许您创建由
Domain
过滤的数据帧的深度副本,并根据需要打印状态。每次迭代,您都要过滤掉正确的
,您将能够打印每个状态。

代码
del df_temp
将在每次临时数据帧时删除,您不会覆盖每个循环,并且在
for
结束时,您将不再需要它。

谢谢先生!我也从你的回答中学到了什么。再次感谢!