当前位置: 首页 > 面试题库 >

熊猫:转换数据框以显示原始数据框中是否存在值的组合

董鸣
2023-03-14
问题内容

我有一个看起来像这样的数据框:

 | Col 1 | Col 2 | 
0|   A   |   2   |
1|   A   |   3   |
2|   B   |   1   |
3|   B   |   2   |

并且我需要将其转换为一个数据框,以显示每个组合的第1列和第2列中的值(如果该组合包含在原始DataFrame中):

  |  1  |  2  |  3  |
A |False|True |True |
B |True |True |False|

熊猫有没有一种原生的方式来实现这种转变?我是手动创建转换后的Dataframe,但这是减慢速度的方法。

先感谢您!


问题答案:

使用get_dummiesmax

df = pd.get_dummies(df.set_index('Col 1')['Col 2'], dtype=bool).rename_axis(None).max(level=0)
print (df)
       1     2      3
A  False  True   True
B   True  True  False

或者,如果可能的话,不要在列中丢失任何值,Col2然后DataFrame.pivot与一起使用DataFrame.notna,以删除索引和列名,请使用DataFrame.rename_axis

df = df.pivot('Col 1', 'Col 2', 'Col 1').notna().rename_axis(index=None, columns=None)
print (df)
       1     2      3
A  False  True   True
B   True  True  False

备选方案可能是重复项,但pivot失败了:

df = (df.pivot_table(index='Col 1', columns='Col 2', values='Col 1', aggfunc='size')
        .notna()
        .rename_axis(index=None, columns=None))
print (df)
       1     2      3
A  False  True   True
B   True  True  False

或评论中的解决方案

df = (pd.crosstab(df['Col 1'], df['Col 2'])
        .gt(0)
        .rename_axis(index=None, columns=None))


 类似资料:
  • 问题内容: 我对熊猫有些陌生。我有一个熊猫数据框,它是1行乘23列。 我想将其转换为系列吗?我想知道最pythonic的方法是什么? 我试过了,但是抱怨。它不够聪明,无法意识到它仍然是数学上的“向量”。 谢谢! 问题答案: 它不够聪明,无法意识到它仍然是数学上的“向量”。 可以说它足够聪明,可以识别尺寸差异。:-) 我认为您可以做的最简单的事情是使用位置选择该行,这将为您提供一个Series,其列

  • 问题内容: 我注意到程序中存在一个错误,发生该错误的原因是因为熊猫似乎是通过引用熊猫数据框而不是通过值进行复制。我知道不可变对象将始终通过引用传递,但pandas数据帧不是不可变的,因此我不明白为什么它通过引用传递。谁能提供一些信息? 谢谢!安德鲁 问题答案: Python中的所有函数都是“按引用传递”,没有“按值传递”。如果要显式复制pandas对象,请尝试。

  • 问题内容: 我想查看数据框内特定列中是否存在特定字符串。 我遇到了错误 ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。 问题答案: 将返回大小为布尔值的指标向量 因此,您可以使用 或者,如果您不在乎有多少条记录与您的查询匹配

  • 问题内容: 我有以下熊猫数据框: 我想将日期时间索引转换为数据框的列。我尝试过,但结果没有改变。任何想法? 问题答案: 需要分配输出或参数:

  • 如果列表中的值存在于其中一个dataframe列中,我需要迭代列表并执行特定操作。我试着按照下面的方法做,但发现了下面的错误 '错误:#序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all() 所需输出:

  • 问题内容: 我有两个看起来像这样的数据框: 现在,如果我利用pandas .isin函数,我可以做一些漂亮的事情 列和from存在于while中不 我的问题是:是否有人知道为df_2中但不存在于df_1中的列返回列标签的方法 像这样的东西 先感谢您! 问题答案: 熊猫索引对象具有类似集合的属性,因此您可以直接执行以下操作: 您还可以使用运算符来计算交集,并集和对称差: 过去存在差异的运算符,现已弃

  • 问题内容: 我正在尝试学习熊猫,但请对以下内容感到困惑。我想用行平均值替换NaN是一个数据框。因此,类似的东西应该可以工作,但是由于某种原因,它对我来说是失败的。我是否想念任何东西,我做错了什么?是因为其未执行; 但是这样的事情看起来很好 问题答案: 如评论所述,fillna的axis参数为NotImplemented。 注意:这在这里很重要,因为您不想用第n行平均值填写第n列。 现在,您需要遍历

  • 问题内容: 我有以下数据框: 我尝试过数据透视表 但出现以下错误: 数据透视表的任何替代选择吗? 问题答案: 您可以用来转置数据框。这将数据框切换为圆形,以便行变为列。 您也可以使用。