gpt4 book ai didi

python - 如何获取包含与索引对应的特定值的列列表作为 Pandas 数据框中的新列?

转载 作者:行者123 更新时间:2023-12-02 15:44:46 24 4
gpt4 key购买 nike

我有一个 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

如图所示,我创建了一个名为“收件人”的新列,并遍历每一行和每一列以填充“收件人”列。

生成的数据框如下所示:

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 数据框中创建这个“收件人”列?

最佳答案

非 NaNness 和列(后缀为“,”)的点积是执行此操作的一种方式:

In [242]: df.notna().dot(df.columns + ", ").str[:-2]
Out[242]:
A
B
C A
D B
E B, C
F
G D
H
I A
J
dtype: object

发生的事情是,df.notna() 是一个 True/False 数据帧;然后我们将它与列名 (", "added) 进行点积。由于在数字上下文中 True 为 1 而 False 为 0,因此点积的行为类似于列名选择器。然后最后我们去掉尾随的 ", "s。

关于python - 如何获取包含与索引对应的特定值的列列表作为 Pandas 数据框中的新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74619638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com