Как решить проблему противной синтаксической ошибки с моим новым столбцом в моей функции .apply () - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь переклассифицировать ряд строк, которые представляют количество загрузок приложения, поскольку оно не показывает необработанное количество загрузок.Я должен сгруппировать 20 строк в 7 различных элементов и поместить их в новый столбец с именем «загрузки».

Я пытался редактировать скобки и скобки.Я ранее использовал np.apply неправильно.

from pandas import DataFrame 

fear = pd.read_csv('googleplaystore.csv', encoding='latin')

n_ratings = {'Install':['0+', '1+', '5+', '10+', '50+', '100+', '500+', '1,000+', '5,000+', 
             '10,000+', '50,000+', '100,000+', '500,000+', '1,000,000+', '5,000,000+', '10,000,000+', 
             '50,000,000+', '100,000,000+', '500,000,000+', '1,000,000,000+']}
df = DataFrame(n_ratings, columns=['Install'])  

df['downloads'] = df['Install'].apply(lambda x: '0-1k' if x.isin(['0+', '1+', '5+', '10+', '50+', '100+', '500+'])

df['downloads'] = df['Install'].apply(lambda x: '1k-100k' if x.isin(['1,000+', '5,000+', '10,000+', '50,000+']))

df['downloads'] = df['Install'].apply(lambda x: '100k-1M' if x.isin(['100,000+', '500,000+'])

df['downloads'] = df['Install'].apply(lambda x: '1M-10M' if x.isin(['1,000,000+', '5,000,000+'])

df['downloads'] = df['Install'].apply(lambda x: '10M-100M' if x.isin(['10,000,000+', '50,000,000+'])

df['downloads'] = df['Install'].apply(lambda x: '100M-1B' if x.isin(['100,000,000+', '500,000,000+'])

df['downloads'] = df['Install'].apply(lambda x: '> 1B' if x.isin(['1,000,000,000+'])

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Если вы действительно хотите использовать apply, вы можете просто определить функцию, которая проверяет все условия в одном блоке.

def classify(x):
    if x in ['0+', '1+', '5+', '10+', '50+', '100+', '500+']:
        return '0-1k'
    elif x in ['1,000+', '5,000+', '10,000+', '50,000+']:
        return '1k-100k'
    elif x in ['100,000+', '500,000+']:
        return '100k-1M' 
    elif x in ['1,000,000+', '5,000,000+']:
        return '1M-10M'
    elif x in ['10,000,000+', '50,000,000+']:
        return '10M-100M' 
    elif x in ['100,000,000+', '500,000,000+']:
        return '100M-1B'
    elif x in ['1,000,000,000+']:
        return '> 1B'
    else:
        return 'error'

df['Downloads'] = df['Install'].apply(classify)

           Install Downloads
0               0+      0-1k
1               1+      0-1k
2               5+      0-1k
3              10+      0-1k
4              50+      0-1k
5             100+      0-1k
6             500+      0-1k
7           1,000+   1k-100k
8           5,000+   1k-100k
9          10,000+   1k-100k
10         50,000+   1k-100k
11        100,000+   100k-1M
12        500,000+   100k-1M
13      1,000,000+    1M-10M
14      5,000,000+    1M-10M
15     10,000,000+  10M-100M
16     50,000,000+  10M-100M
17    100,000,000+   100M-1B
18    500,000,000+   100M-1B
19  1,000,000,000+      > 1B
1 голос
/ 30 марта 2019

Вам не нужно apply или if-else для этого. Просто используйте np.select для того, что вы передаете conditions, и на основании этих условий вы передаете его choices:

conditions = (
    df['Install'].isin(['0+', '1+', '5+', '10+', '50+', '100+', '500+']),
    df['Install'].isin(['1,000+', '5,000+', '10,000+', '50,000+']),
    df['Install'].isin(['100,000+', '500,000+']),
    df['Install'].isin(['1,000,000+', '5,000,000+']),
    df['Install'].isin(['10,000,000+', '50,000,000+']),
    df['Install'].isin(['100,000,000+', '500,000,000+']),
    df['Install'].isin(['1,000,000,000+'])
)

choices = ['0-1k', '1k-100k', '100k-1M', '1M-10M', '10M-100M', '100M-1B', '> 1B']

df['downloads'] = np.select(conditions, choices, default='unknown')

print(df)
           Install downloads
0               0+      0-1k
1               1+      0-1k
2               5+      0-1k
3              10+      0-1k
4              50+      0-1k
5             100+      0-1k
6             500+      0-1k
7           1,000+   1k-100k
8           5,000+   1k-100k
9          10,000+   1k-100k
10         50,000+   1k-100k
11        100,000+   100k-1M
12        500,000+   100k-1M
13      1,000,000+    1M-10M
14      5,000,000+    1M-10M
15     10,000,000+  10M-100M
16     50,000,000+  10M-100M
17    100,000,000+   100M-1B
18    500,000,000+   100M-1B
19  1,000,000,000+      > 1B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...