Как автоматически классифицировать данные в панде? - PullRequest
0 голосов
/ 20 мая 2019

У меня есть фрейм данных с более чем 1000 строками и 200 столбцами, примерно так:

     my_data:
             ID,   f1,   f2, ..     ,f200   Target
             x1     3     0, ..     ,2      0
             x2     6     2, ..     ,1      1
             x3     5     4, ..     ,0      0
             x4     0     5, ..     ,18     1
             ..     .     ., ..     ,..     .
             xn     13    0, ..     ,4      0

Сначала я хочу автоматически разделить эти функции (f1-f200) на четыре группы как no, low, medium и high, так что идентификаторы, которые имеют ноль в своих столбцах (например, x1 в f2 содержит 0, то же самое в xn ..) должны быть метками «нет», остальные должны бытьподразделяются на низкие, средние и высокие.

Я нашел это:

  pd.cut(my_data,3, labels=["low", "medium", "high"]) 

Но это не решает проблему.Есть идеи?

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Итак, вам нужно создать динамические корзины и итерировать столбцы, чтобы получить это.Это можно сделать ниже:

new_df = pd.DataFrame()
for name,value in df1.iteritems(): ##df1 is your dataframe
    bins = [-np.inf, 0,df1[name].min()+1,df1[name].mean(), df1[name].max()]
    new_df[name] = pd.cut(df1[name], bins=bins, include_lowest=False, labels=['no','low', 'mid', 'high'])
0 голосов
/ 20 мая 2019

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

# Iterate over the Dataframe Columns i.e. f1-f200

    for col in df.columns:

        # Define your Condition
        conditions = [
            (df[col] == 0),
            (df[col] == 1),
            (df[col] == 2),
            (df[col] > 3)]

        # Values you want to map
        choices = ['no','Low', 'Medium', 'High']

        df[col] = np.select(conditions, choices, default='Any-value')
...