【问题标题】:How to make a binary cross validation table from a pivot table using Pandas如何使用 Pandas 从数据透视表制作二进制交叉验证表
【发布时间】:2021-11-01 22:10:33
【问题描述】:

我有一个如下所示的数据集

当我进行旋转时,它应该看起来像这样

但我真正想要的是这个

我可以用循环和东西以一种不漂亮和直观的方式来完成它......就像我可以搜索不是 None 类型的值,然后用 True 和 ifnot False 替换。但这又不是很漂亮,如果我在大型数据集上执行它可能需要一些时间(情况就是这样)。

所以我想知道我是否可以用单行或几行以更漂亮和更快的方式完成。

谢谢!

【问题讨论】:

    标签: python pandas numpy pivot mask


    【解决方案1】:

    pandas.DataFrame.pivot_table 是您正在寻找的。 assign 只是为聚合创建虚拟变量。

    df = (
        df.assign(**{"": 1})
          .pivot_table(
              index="ID", 
              columns="ISIN", 
              aggfunc="max", 
              fill_value=0,
          ).astype(bool)
    )
    

    输出:

    ISIN        A      B      C      D      E
    ID
    AXAEXL  False  False  False   True  False
    AXAMIL   True   True   True  False  False
    UNPEVL   True  False  False  False   True
    UNPMSP   True   True  False  False  False
    

    【讨论】:

      【解决方案2】:

      来自您的DataFrame

      import pandas as pd
      from io import StringIO
      
      df = pd.read_csv(StringIO("""
      ID,ISIN
      AXAMIL,A
      AXAMIL,B
      AXAMIL,C
      AXAEXL,D
      UNPEVL,A
      UNPEVL,E
      UNPMSP,A
      UNPMSP,B"""), sep=',')
      df
      

      我们可以使用groupby,然后使用unstack 的结果并将其转换为boolean 以获得预期的结果:

      >>> df.groupby(['ID', 'ISIN']).size().unstack(fill_value=0).astype(bool).rename_axis(None, axis=1).reset_index()
          ID      A       B       C       D       E
      0   AXAEXL  False   False   False   True    False
      1   AXAMIL  True    True    True    False   False
      2   UNPEVL  True    False   False   False   True
      3   UNPMSP  True    True    False   False   False
      

      【讨论】:

        【解决方案3】:

        您可以只使用isna() 方法,如下所示:

        new_df = ~df.isna()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-24
          • 1970-01-01
          相关资源
          最近更新 更多