Запрос по строкам в фрейме данных «Панды» - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть датафрейм, как упомянуто ниже. Как я могу получить «Категории», которые способствуют как минимум 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 ]

1 голос
/ 22 апреля 2019

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    

И с "Total Business" повторно добавлено:

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
0 голосов
/ 22 апреля 2019

Здесь df.groupby ('category') ['Year 2014-15']. Sum () суммирует бизнес по организации в каждой категории.Вы можете вычислить значение, которое будет составлять 30% от общего бизнеса, и вся команда даст вам категорию, которая составляет более чем значение

. Существует неверное представление о 30% бизнеса в целом или о 30% бизнеса в организации, который примет решение о ценностизначение

(df['category'].unique())[df.groupby('category')['Year 2014-15'].sum() > val ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...