熊猫访问具有重复列名的第一列

时间:2019-06-15 16:12:25

标签: pandas duplicates slice

需要一些帮助来访问第一个空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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

我将使用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