我有一个Pandas 数据框df
,它看起来如下:
A B C D E F G H I J
Values
A NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
B NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
C yes NaN NaN NaN NaN NaN NaN NaN NaN NaN
D NaN yes NaN NaN NaN NaN NaN NaN NaN NaN
E NaN ok ok NaN NaN NaN NaN NaN NaN NaN
F NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
G NaN NaN NaN ok NaN NaN NaN NaN NaN NaN
H NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
I yes NaN NaN NaN NaN NaN NaN NaN NaN NaN
J NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
Df.to_dict()如下所示:
{'A': {'A': nan,
'B': nan,
'C': 'yes',
'D': nan,
'E': nan,
'F': nan,
'G': nan,
'H': nan,
'I': 'yes',
'J': nan},
'B': {'A': nan,
'B': nan,
'C': nan,
'D': 'yes',
'E': 'ok',
'F': nan,
'G': nan,
'H': nan,
'I': nan,
'J': nan},
'C': {'A': nan,
'B': nan,
'C': nan,
'D': nan,
'E': 'ok',
'F': nan,
'G': nan,
'H': nan,
'I': nan,
'J': nan},
'D': {'A': nan,
'B': nan,
'C': nan,
'D': nan,
'E': nan,
'F': nan,
'G': 'ok',
'H': nan,
'I': nan,
'J': nan},
'E': {'A': nan,
'B': nan,
'C': nan,
'D': nan,
'E': nan,
'F': nan,
'G': nan,
'H': nan,
'I': nan,
'J': nan},
'F': {'A': nan,
'B': nan,
'C': nan,
'D': nan,
'E': nan,
'F': nan,
'G': nan,
'H': nan,
'I': nan,
'J': nan},
'G': {'A': nan,
'B': nan,
'C': nan,
'D': nan,
'E': nan,
'F': nan,
'G': nan,
'H': nan,
'I': nan,
'J': nan},
'H': {'A': nan,
'B': nan,
'C': nan,
'D': nan,
'E': nan,
'F': nan,
'G': nan,
'H': nan,
'I': nan,
'J': nan},
'I': {'A': nan,
'B': nan,
'C': nan,
'D': nan,
'E': nan,
'F': nan,
'G': nan,
'H': nan,
'I': nan,
'J': nan},
'J': {'A': nan,
'B': nan,
'C': nan,
'D': nan,
'E': nan,
'F': nan,
'G': nan,
'H': nan,
'I': nan,
'J': nan},
'To': {'A': '',
'B': '',
'C': 'A, ',
'D': 'B, ',
'E': 'B, C, ',
'F': '',
'G': 'D, ',
'H': '',
'I': 'A, ',
'J': ''}}
我想获得一个新的列"to",它对应于每一行,其中包含具有非NaN值的列的列表,例如"yes"或"ok".
我使用以下代码完成了该操作:
df["To"] = ""
for index in df.index:
for column in df.columns[:-1]:
if pd.isnull(df.loc[index, column]) == False:
df.loc[index, "To"] += column + ", "
df
如图所示,我创建了一个名为"to"的新列,并循环遍历每一行和每一列,以填充"to"列.
生成的数据帧如下所示:
A B C D E F G H I J To
Values
A NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
B NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
C yes NaN NaN NaN NaN NaN NaN NaN NaN NaN A,
D NaN yes NaN NaN NaN NaN NaN NaN NaN NaN B,
E NaN ok ok NaN NaN NaN NaN NaN NaN NaN B, C,
F NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
G NaN NaN NaN ok NaN NaN NaN NaN NaN NaN D,
H NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
I yes NaN NaN NaN NaN NaN NaN NaN NaN NaN A,
J NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
我认为这不是一个有效的过程,当数据集很大时,这是很耗时的. 有没有更短、更有效的方法在Pandas 数据框中创建这个"to"列?