记录pandas中条件条目的位置

inv*_*tus 5 python pandas

我有一个如下所示的数据框:

在此输入图像描述

我想遍历每一行并打印非NaN条目的[i,j]位置.在这里,循环理想地打印"G56"和"G51".

到目前为止,我已经创建了一个T/F数据帧,将所有非NaN记录为True:

df_na = df.notnull()
Run Code Online (Sandbox Code Playgroud)

我可以得到任何特鲁斯的行索引:

for index, row in df_na.iterrows():
    if row.any() == True:
        print(index)
Run Code Online (Sandbox Code Playgroud)

但我无法得到列名.(我也关注这种方法,因为iterrows()比itertuples()慢.

piR*_*red 3

设置

df = pd.DataFrame(np.nan, range(54, 62), [*'ABCDEFGHIJ'])
df.at[56, 'G'] = 3
df.at[61, 'G'] = 2
Run Code Online (Sandbox Code Playgroud)

any和axis=1

df.index[df.notna().any(1)]

Int64Index([56, 61], dtype='int64')
Run Code Online (Sandbox Code Playgroud)

打印

print(*df.index[df.notna().any(1)], sep='\n')

56
61
Run Code Online (Sandbox Code Playgroud)

更普遍

numpy.where

i, j = np.where(df.notna())
print(*zip(df.index[i], df.columns[j]), sep='\n')

(56, 'G')
(61, 'G')
Run Code Online (Sandbox Code Playgroud)

stack

默认情况下,stack删除空值

print(*df.stack().index.values, sep='\n')

(56, 'G')
(61, 'G')
Run Code Online (Sandbox Code Playgroud)