Панды обращаются к первому столбцу с повторяющимися именами столбцов - PullRequest
1 голос
/ 15 июня 2019

Нужна помощь в доступе к первому пустому столбцу df, который также является повторяющимся именем по имени.

Рассмотрим этот фрейм данных

import pandas as pd
df = pd.DataFrame(columns=['A', 'B', 'C', 'C', 'C', 'C', 'D', 'E'], index=[0,1,2,3])
     A    B    C    C    C    C    D    E
0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
1  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
3  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN

затем получите доступ к срезу по индексатору и имени столбца

indexer = [1,3]
df.loc[indexer, 'C']

     C    C    C    C
1  NaN  NaN  NaN  NaN
3  NaN  NaN  NaN  NaN

Я хочу отредактировать только первый экземпляр столбца C, чтобы я получил

     A    B    C    C    C    C    D    E
0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
1  NaN  NaN   99  NaN  NaN  NaN  NaN  NaN
2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
3  NaN  NaN   99  NaN  NaN  NaN  NaN  NaN

Я пробовал df.loc [indexer, 'C']. Iloc [:, 0] = 99

Но он не установил значения.

Заранее спасибо за ваши ответы и идеи.

Ответы [ 2 ]

3 голосов
/ 15 июня 2019

IIUC:

indexer = [1, 3]
col = (df.columns == 'C').argmax()
df.iloc[indexer, col] = 99
df

     A    B    C    C    C    C    D    E
0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
1  NaN  NaN   99  NaN  NaN  NaN  NaN  NaN
2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
3  NaN  NaN   99  NaN  NaN  NaN  NaN  NaN
2 голосов
/ 15 июня 2019

Я бы использовал index.get_loc, чтобы получить фрагмент целого местоположения столбцов C и передать его start в .iloc следующим образом:

indexer = [1, 3]
df.iloc[indexer, df.columns.get_loc('C').start] = 99

Или используя np.nonzero

c_loc = np.nonzero(df.columns == 'C')[0]    
df.iloc[indexer, c_loc[0]] = 99


Out[87]:
     A    B    C    C    C    C    D    E
0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
1  NaN  NaN   99  NaN  NaN  NaN  NaN  NaN
2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
3  NaN  NaN   99  NaN  NaN  NaN  NaN  NaN
...