首页 > 解决方案 > 将 DataFrame 列名映射到适当的单元格

问题描述

这是我在此的头一篇博文。

我不完全知道如何在没有示例的情况下提出这个问题,因此很难找到答案。无论如何,我有一个看起来像这样的 DataFrame(有更多的列和数千行):

df = pd.DataFrame({"A": [1, 0, 0], "B": [0, 0, 1], "C": [0, 1, 0]})

我想创建额外的列,例如。“类型”,其中每一行的值将是该行中包含 1 的列的列名。例如:

df = pd.DataFrame({"A": [1, 0, 0], "B": [0, 0, 1], "C": [0, 1, 0], "Type": ["A", "C", "B"]})

我希望这是有道理的。

谢谢,克里斯

标签: pythonpandasdataframe

解决方案


您可以检查是否df等于 1,使用.eq,然后使用idxmax(axis=1)获取该行中条目的列索引等于 1,如下所示:

df['Type'] = df.eq(1).idxmax(axis=1)

或在值为 0 和 1 的情况下简化它(感谢@wwii):

df['Type'] = df.idxmax(axis=1)

或者,您也可以使用df.dot,如下所示:

df['Type'] = df.dot(df.columns)   

结果:

print(df)

   A  B  C Type
0  1  0  0    A
1  0  0  1    C
2  0  1  0    B

推荐阅读