python - 跨数据框'Pandas'中的行查询
问题描述
我有一个如下所述的数据框,我怎样才能获得对不同“组织”的整体业务贡献至少 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>
解决方案
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
推荐阅读
- angularjs - HttpFactory 和 HttpJson 有什么区别?
- keras - 理解 keras.layers.BatchNormalization 计算
- css - 如何在标记中指定我的背景图像
- python - 从字符串变量python中删除符号'['和']'
- reactjs - React Update Fetch on Checkbox Click
- ansible - Ansible yum 在远程服务器上安装 rpm
- react-native - 点击时如何使touchablehighlight保持黑暗?
- xml - 将 XML 导入 MS Access:非标准 xml?
- django - 没有帖子与给定的查询匹配。虽然有些物品具有相同的蛞蝓
- amazon-web-services - 为什么我不能使用 VPC NACL 来加强安全性?