我有一个如下所述的数据框,如何获得“类别”,该类别至少为不同“组织”中的整体业务贡献了30%。我在下面的查询中尝试过,但是没有用。
Organization_category_df = df.loc[(df['Year 2014-15']) >= 0.3 * (df['Category'] == 'Total Business')]
糟糕的是,我无法添加表,无论如何我至少创建了一个html表,该表应该有助于复制数据。
<table>
<tr>
<th>Year 2014-15</th>
<th>Category</th>
<th>Organization</th>
</tr>
<tr>
<td>35000</td>
<td>laptop</td>
<td>xyz</td>
</tr>
<tr>
<td>25000</td>
<td>tablet</td>
<td>xyz</td>
</tr>
<tr>
<td>40000</td>
<td>mobile</td>
<td>xyz</td>
</tr>
<tr>
<td>100000</td>
<td>Total Business</td>
<td>xyz</td>
</tr>
<tr>
<td>23000</td>
<td>laptop</td>
<td>pqr</td>
</tr>
<tr>
<td>10000</td>
<td>tablet</td>
<td>pqr</td>
</tr>
<tr>
<td>15000</td>
<td>mobile</td>
<td>pqr</td>
</tr>
<tr>
<td>48000</td>
<td>Total Business</td>
<td>pqr</td>
</tr>
</table>
答案 0 :(得分:1)
IIUC,带有小计(“生意总额”)的行使事情变得复杂。易于创建boolean mask
来过滤掉它们,然后您可以使用groupby.transform
来过滤DataFrame
。
如果需要,您可以使用pandas.concat
和sort_index
重新插入“业务总数”行:
mask = df['Category'].eq('Total Business')
df_filtered = df[~mask]
df_filtered = df_filtered[df_filtered.groupby('Organization')['Year 2014-15'].transform(lambda x: x / x.sum()).ge(0.3)]
print(df_filtered)
[出]
Year 2014-15 Category Organization
0 35000 laptop xyz
2 40000 mobile xyz
4 23000 laptop pqr
6 15000 mobile pqr
并重新添加了“总业务”:
df_filtered = pd.concat([df_filtered, df[mask]]).sort_index()
[出]
Year 2014-15 Category Organization
0 35000 laptop xyz
2 40000 mobile xyz
3 100000 Total Business xyz
4 23000 laptop pqr
6 15000 mobile pqr
7 48000 Total Business pqr
答案 1 :(得分:0)
在此,df.groupby('category')['2014-15年'] .sum()将按类别对整个组织的业务进行汇总。您可以计算将占总业务量30%的val,而整个命令将为您提供比val更重要的类别
总体上30%的业务或每个组织的30%的业务存在不确定性,这将决定其价值
(df['category'].unique())[df.groupby('category')['Year 2014-15'].sum() > val ]