查询数据框“ Pandas”中的行

时间:2019-04-22 12:22:20

标签: python pandas dataframe

我有一个如下所述的数据框,如何获得“类别”,该类别至少为不同“组织”中的整体业务贡献了30%。我在下面的查询中尝试过,但是没有用。

Organization_category_df = df.loc[(df['Year 2014-15']) >= 0.3 * (df['Category'] == 'Total Business')]

enter image description here

糟糕的是,我无法添加表,无论如何我至少创建了一个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>

2 个答案:

答案 0 :(得分:1)

IIUC,带有小计(“生意总额”)的行使事情变得复杂。易于创建boolean mask来过滤掉它们,然后您可以使用groupby.transform来过滤DataFrame

如果需要,您可以使用pandas.concatsort_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 ]