【问题标题】:Storing CDF in single dataframe cell or several columns将 CDF 存储在单个数据框单元格或多列中
【发布时间】:2021-06-18 08:37:11
【问题描述】:

我有 10 个项目对,分别称它们为 1A 和 1B、2A 和 2B、3A 和 3B -> 10A 和 10B 在这样的框架中:

Item_col1    Item_col2   
1A           1B         
2A           2B         
3A           3B         

每个项目(例如;2A)都有一个相关的累积概率分布函数。我存储在 np.arrays [CDF_A1, CDF_2A, CDF_3A, CDF_4A] 列表中的每个 CDF,每个都有 100 个元素,看起来有点像这样:

[0.0000, 0.0100, 0.2000,...0.9999, 1.0]

我想将 CDF 添加到框架中,最终进行相互比较(例如,1A 与 1B,2A 与 2B),但我不知道将它们存储在框架中的最佳方式。

像这样存储它们会更好(并且可能吗?):

Item_col1    Item_col2    CDF_Item_col1    CDF_Item_col2
1A           1B           CDF_1A           CDF_1B
2A           2B           CDF_2A           CDF_2B
3A           3B           CDF_3A           CDF_3B

或者应该是这样还是必须是这样:

Item_col1    Item_col2 (As) CDF_Element1    CDF_Element2....CDF_Element100   (Bs) CDF_Element1    CDF_Element2....CDF_Element100 
1A           1B             0.0000          0.0100          1.0000                0.0000          0.0100          1.0000    
2A           2B             0.0000          0.0100          1.0000                0.0000          0.0100          1.0000
3A           3B             0.0000          0.0100          1.0000                0.0000          0.0100          1.0000

【问题讨论】:

    标签: python pandas cdf


    【解决方案1】:

    我认为您可以像这样存储它们:

    df
       item1 item2      cdfA      cdfB
    0     1A    1B  0.574843  0.501655
    1     1A    1B  0.574843  0.638855
    2     1A    1B  0.574843  0.827372
    3     1A    1B  0.574843  0.450464
    4     1A    1B  0.162894  0.501655
    5     1A    1B  0.162894  0.638855
    6     1A    1B  0.162894  0.827372
    7     1A    1B  0.162894  0.450464
    8     1A    1B  0.479719  0.501655
    9     1A    1B  0.479719  0.638855
    10    1A    1B  0.479719  0.827372
    11    1A    1B  0.479719  0.450464
    12    1A    1B  0.724478  0.501655
    13    1A    1B  0.724478  0.638855
    14    1A    1B  0.724478  0.827372
    15    1A    1B  0.724478  0.450464
    16    2A    2B  0.827809  0.709354
    17    2A    2B  0.827809  0.657139
    18    2A    2B  0.827809  0.115151
    19    2A    2B  0.827809  0.942483
    20    2A    2B  0.717945  0.709354
    

    正如您所说,您可能还想比较这些 CDF 的值,如 1A 和 1B、2A 和 2B、.. 等等,如果您有这种数据框,我认为这对您来说会更容易稍后进行这些比较。如果您认为它会占用更多 RAM,您甚至可以将 item1 和 item2 列更改为 Categorical,因为它们是重复的,因为

    cols = ['item1', 'item2']
    for col in cols:
        df[col] = df[col].astype('category')
    

    【讨论】:

    • 谢谢!这很有帮助!