【问题标题】:Split dataFrames based on column header prefix根据列标题前缀拆分数据帧
【发布时间】:2018-04-28 01:48:33
【问题描述】:

我有一个数据框,其中列名共享一个公共元素,其他列已生成并带有该公共元素的后缀。我有一个大约 100 个条目的这些元素的列表。我想使用此列表迭代地切片大 df,通过分组转换子 df,并最终将它们连接在一起。

我正在考虑使用字典方法——使用列表作为键,然后将共享此元素的列定义为值。我不确定如何实现这一点。我复制了一个简化版本来说明我想扩大规模。实际上,大约有 100 个键,每个键有 20 个关联的列。

   A A_1 A_2 A_3  B B_1 B_2 B_3
0  1   e   f   g  1   x   y   z
1  2   e   f   g  2   x   y   z
2  3   e   f   g  3   x   y   z
3  3   e   f   g  3   x   y   z
4  3   e   f   g  4   x   y   z
5  3   e   f   g  4   x   y   z

df_list = ['A','B']

df_A = df[df.columns[df.columns.to_series().str.contains('A')]]

df_B = df[df.columns[df.columns.to_series().str.contains('B')]]

calc_A = df_A.groupby(['A']).head(1)
print(calc_A)

   A A_1 A_2 A_3
0  1   e   f   g
1  2   e   f   g
2  3   e   f   g


calc_B = df_B.groupby(['B']).head(1)
print(calc_B)

   B B_1 B_2 B_3
0  1   x   y   z
1  2   x   y   z
2  3   x   y   z
4  4   x   y   z

请告知如何构建此字典,遍历列表以切片 df 并将共享键的列分配为新子 df 的值。谢谢你。

【问题讨论】:

    标签: python pandas dictionary dataframe pandas-groupby


    【解决方案1】:

    IIUC,你可以对列前缀进行分组,然后初始化一个字典:

    d = {}
    for i, g in df.groupby(by=lambda x: x.split('_')[0], axis=1):
        d[i] = g.groupby(i).head(1)
    

    你也可以使用dict理解

    d = {
            i : g.groupby(i).head(1) 
            for (i, g) in df.groupby(by=lambda x: x.split('_')[0], axis=1)
    }
    
    for k, v in d.items():
        print(v, '\n')
    
       A A_1 A_2 A_3
    0  1   e   f   g
    1  2   e   f   g
    2  3   e   f   g 
    
       B B_1 B_2 B_3
    0  1   x   y   z
    1  2   x   y   z
    2  3   x   y   z
    4  4   x   y   z 
    
    d.keys()
    dict_keys(['A', 'B'])
    

    【讨论】:

      猜你喜欢
      • 2019-10-22
      • 2020-02-12
      • 2020-04-21
      • 2018-03-09
      • 1970-01-01
      • 2022-10-02
      • 2021-08-05
      • 2022-12-31
      • 2021-04-16
      相关资源
      最近更新 更多