【问题标题】:Pandas: Column medians based on column namesPandas:基于列名的列中位数
【发布时间】:2020-08-03 04:38:57
【问题描述】:

我有以下熊猫数据框。

df = pd.DataFrame(np.random.randn(3,6), columns=['A1','A2','A3','B1','B2','B3'])
df

           A1         A2          A3          B1          B2           B3
0   -0.409420   2.382457    1.151565    0.625461    0.224453    -0.351573
1   -0.676554   -1.485376   0.597227    0.240113    0.033963    1.224241
2   0.678698    1.392778    1.031625    0.388137    -0.566746   -0.798156

如何获得这样的列的中位数

        medA     medB
0        ...      ...
1        ...      ...
2        ...      ...   

我的实际数据框有 300 列,所以我想通过列名的相似性来区分。

【问题讨论】:

    标签: python pandas dataframe median


    【解决方案1】:

    这是一个 for 循环的答案:

    dict = {}
    dff = pd.DataFrame()
    
    for letter in ['A', 'B']:
        dict[letter] = []
        for col in df.columns:
            if col.startswith(letter):
                dict[letter].append(col)
        dff[f'med_{letter}'] = df[dict[letter]].median(axis=1)
    

    我不确定您所说的“通过列名的相似性进行区分”是什么意思,这里它只是将每个列名的开头与引物列表中的条目进行比较 (['A', 'B'])。

    【讨论】:

      【解决方案2】:

      这看起来像 pd.wide_to_long:

      (pd.wide_to_long(df.reset_index(),['A','B'],'index','idx')
        .groupby('index').median().add_prefix('med_').rename_axis(None))
      

      groupbyaxis=1 上的第一个字符串

      df.groupby(df.columns.str[0],axis=1).median().add_prefix('med_')
      

            med_A     med_B
      0 -0.075465 -0.317335
      1 -0.355822 -0.517270
      2  0.279270 -1.134389
      

      【讨论】:

        猜你喜欢
        • 2019-01-02
        • 2018-03-27
        • 2020-09-16
        • 2014-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-25
        • 1970-01-01
        相关资源
        最近更新 更多