Объедините все строки в данных как другие, кроме одного - PullRequest
1 голос
/ 22 мая 2019

У меня есть набор данных

       Item Type     market_share
    Office Supplies     10
     Baby Food          20
  Vegetables            10
       Meat             30
 Personal Care          10
   Household            20

Я хочу объединить все строки, кроме столбца «Детское питание», чтобы мой набор данных выглядел как

       Item Type     market_share
      Others            80
     Baby Food          20

Как я могу это сделать, в основномразбейте все ряды, сложите их и сложите как другие.

Ответы [ 4 ]

5 голосов
/ 22 мая 2019

Вы можете использовать:

df.groupby(df['Item Type'].eq('Baby Food').map({True:'Baby Food',False:'Others'})).sum()

            market_share
Item Type              
Baby Food            20
Others               80
2 голосов
/ 22 мая 2019

Создать array или Series по условию или Series.map и преобразовать пропущенные значения в NaN и объединить sum:

s = np.where(df['Item Type'] == 'Baby Food', 'Baby Food', 'Others')
print (s)
['Others' 'Baby Food' 'Others' 'Others' 'Others' 'Others']

s = df['Item Type'].map({'Baby Food':'Baby Food'}).fillna('Others')
print (s)
0       Others
1    Baby Food
2       Others
3       Others
4       Others
5       Others
Name: Item Type, dtype: object

df = df.groupby(s)['market_share'].sum().rename_axis('Item Type').reset_index()

print (df)
   Item Type  market_share
0  Baby Food            20
1     Others            80
0 голосов
/ 22 мая 2019

Вы можете использовать функцию исключения != и функцию is ==.

df[df['market_share'] != 'Baby Food'].sum()

df[df['market_share'] == 'Baby Food'].sum()
0 голосов
/ 22 мая 2019

Использование np.where -

df['market_share_2'] = np.where(df['Item Type'].values=='Baby Food', 'Baby Food', 'Others')

Выход

         Item Type  market_share market_share_2
0  Office Supplies            10         Others
1        Baby Food            20      Baby Food
2       Vegetables            10         Others
3             Meat            30         Others
4    Personal_Care            10         Others
5        Household            20         Others

Затем используйте value_counts() -

df['market_share_2'].value_counts()

Others       5
Baby Food    1
Name: market_share_2, dtype: int64

TLDR;

pd.Series(np.where(df['Item Type'].values=='Baby Food', 'Baby Food', 'Others')).value_counts()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...