Панды: повторяющиеся столбцы, не могу удалить их - PullRequest
0 голосов
/ 25 мая 2018

Я все, у меня странная и несколько разочаровывающая проблема.

Когда я даю следующую команду: gpd_cinc_merged.columns

, я получаю следующий вывод:

Index(['level_0', 'index', 'SU_gdppc', 'SU_gdppcl', 'year', 'US_gdppc',
       'US_gdppcl', 'year', 'index', 'SU_milex', 'SU_cinc', 'US_milex',
       'US_cinc', 'year', 'year'],
      dtype='object')

Вы можете заметить наличие нескольких столбцов year.Все они имеют одинаковое значение, и я хотел бы удалить all but one.

Однако я не могу это сделать

gpd_cinc_merged.drop('year', axis=1, inplace=True)

Удаляет все из них, но мне нужен один из них, чтобыоставайся там.Поэтому вместо этого я посчитал их индексные числа, поэтому я бы удалил just one.

gpd_cinc_merged.drop(gpd_cinc_merged.columns[[7]], axis=1, inplace=True)

Однако эта команда также удаляет все из них.

gpd_cinc_merged.year 

Возвращает фрейм данных с четырьмя year столбцами с одинаковым значением.Тем не менее, я не могу использовать переменную в операции слияния, поскольку она возвращает много значений.

Кто-нибудь знает способ уменьшить эти 4 повторяющихся столбца до 1?

1 Ответ

0 голосов
/ 25 мая 2018

Используйте duplicated с инвертированием mask на ~ для логической маски и затем фильтруйте по boolean indexing с loc перед фильтрацией по столбцам:

c = pd.Index(['level_0', 'index', 'SU_gdppc', 'SU_gdppcl', 'year', 'US_gdppc',
       'US_gdppcl', 'year', 'index', 'SU_milex', 'SU_cinc', 'US_milex',
       'US_cinc', 'year', 'year'])

df = pd.DataFrame(columns=c)

df = df.loc[:, ~df.columns.duplicated()]
print (df)
Empty DataFrame
Columns: [level_0, index, SU_gdppc, SU_gdppcl, year, US_gdppc, 
          US_gdppcl, SU_milex, SU_cinc, US_milex, US_cinc]
Index: []

Деталь :

print (~df.columns.duplicated())
[ True  True  True  True  True  True  True False False  True  True  True
  True False False]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...