Python 使用pandas筛选并查找总计数和百分比
这就是我的数据表的样子 我必须按域筛选,然后找到“课程1完成”状态,如 1.完成百分比 2.未完成项目的百分比 3.不需要的百分比等 并使用plotly将其绘制为嵌套条形图 我尝试使用for循环并尝试了上面的场景,但是我无法实现它,我不确定我会错在哪里 仅打印“域A”的详细信息,而不打印其余信息 我的代码: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
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
的结束时,您将不再需要它。谢谢先生!我也从你的回答中学到了什么。再次感谢!