фильтр в groupby только для столбцов типа python - PullRequest
0 голосов
/ 25 июня 2018

Я хочу отфильтровать фрейм данных, сократив столбцы до тех, которые имеют 1 уникальное значение.

возьмите следующий фрейм данных:

df = pd.DataFrame({'id':[4, 5],
                     'id2':[4, 4],
                      'prod':['prod1', 'prod1'],
                      'amount':[45.0, 45.0],
                      'date':['2018-06-06', '2018-05-06'],
                      'region':['east', 'east']})

Я хотел бы сгруппировать по id2, а затем удалить все столбцы, в которых имеется более 1 уникального значения.

df
   amount        date  id  id2   prod region
0    45.0  2018-06-06   4    4  prod1   east
1    45.0  2018-05-06   5    4  prod1   east

вывод должен выглядеть так:

   amount  id2   prod region
0    45.0    4  prod1   east
1    45.0    4  prod1   east

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Вы также можете обойтись без использования groupby, поскольку у id2 есть одно уникальное значение.

# count unique values per column
d = df.nunique(axis=0)

# select columns with 1 unique value
names = d[d == 1].index.tolist()

# get outpput
print(df[names])

   amount  id2   prod region
0    45.0    4  prod1   east
1    45.0    4  prod1   east
0 голосов
/ 25 июня 2018

В пределах loc, чтобы воспользоваться булевой индексацией

df.loc[:, df.nunique().eq(1)]

   id2   prod  amount region
0    4  prod1    45.0   east
1    4  prod1    45.0   east

Аналогичный ответ, но вместо него используется lambda.Это позволяет избежать зависимости от обращения к df дважды и является полностью встроенным.

df.loc[:, lambda d: d.nunique().eq(1)]
0 голосов
/ 25 июня 2018

Вам нужно groupby, а затем искать столбцы, в которых уникальные значения равны 1.

col = (df.groupby(['id2']).nunique() == 1).any()
df[col.index[col]]

Вывод:

  id2   prod    amount  region
0   4   prod1   45.0    east
1   4   prod1   45.0    east
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...