我有多个数据帧,希望数据帧包含所述多个数据帧中的所有列名.

例如:

# Existing Dataframes
df1 =
    df1_colA  df1_colB  df1_colC
0   1         2         3
1   4         5         6
2   7         8         9

df2 =
    df2_colA  df2_colB  df3_colC
0   10        11        12
1   13        14        15
2   16        17        18

df3 =
    df3_colA  df3_colB  df3_colC
0   30        31        32
1   33        34        35
2   36        37        38

我想得到这样的数据帧:

names =
     df_names   col_names
0    df1        df1_colA
1    df1        df1_colB
2    df1        df1_colC
3    df2        df2_colA
4    df2        df2_colB
5    df2        df2_colC
6    df3        df3_colA
7    df3        df3_colB
8    df3        df3_colC

非常感谢您的帮助,并提前向您表示感谢!

推荐答案

如果可能,提取DataFrame names fom columns names使用列表理解和concat,最后一个用于第一个位置的新列,使用DataFrame.insertSeries.str.extractSeries.str.extractall用于_之前的列名称中的值:

dfs = [df1, df2, df3]
df = pd.concat([df.columns.to_frame(name='col_names') for df in dfs], ignore_index=True)
df.insert(0, 'df_names', df['col_names'].str.extract('^(.*)_'))
print (df)
  df_names col_names
0      df1  df1_colA
1      df1  df1_colB
2      df1  df1_colC
3      df2  df2_colA
4      df2  df2_colB
5      df3  df3_colC
6      df3  df3_colA
7      df3  df3_colB
8      df3  df3_colC

具有扁平列表理解功能的类似ide:

dfs = [df1, df2, df3]
df = pd.DataFrame({'col_names': [x for df in dfs for x in df.columns]})
df.insert(0, 'df_names', df['col_names'].str.extract('^(.*)_'))
print (df)
  df_names col_names
0      df1  df1_colA
1      df1  df1_colB
2      df1  df1_colC
3      df2  df2_colA
4      df2  df2_colB
5      df3  df3_colC
6      df3  df3_colA
7      df3  df3_colB
8      df3  df3_colC

另一种方法是创建数据帧字典,在dict理解中使用concat,dict键创建第一级MultiIndex,因此不需要解析列名称:

dfs = {'df1':df1, 'df2':df2, 'df3':df3}
df = (pd.concat({k:v.columns.to_frame(name='col_names') for k, v in dfs.items()})
        .droplevel(1)
        .rename_axis('df_names')
        .reset_index())

print (df)
  df_names col_names
0      df1  df1_colA
1      df1  df1_colB
2      df1  df1_colC
3      df2  df2_colA
4      df2  df2_colB
5      df2  df3_colC
6      df3  df3_colA
7      df3  df3_colB
8      df3  df3_colC

Python相关问答推荐

OdooElectron 商务产品详情页面中add_qty参数动态更新

隐藏QComboBox的指示器(qdarkstyle)

预期LP_c_Short实例而不是_ctyles.PyCStructType

Pandas 按照特殊规则保留每n行

无法导入已安装的模块

如何将带有逗号分隔的数字的字符串解析为int Array?

强制venv在bin而不是收件箱文件夹中创建虚拟环境

使文本输入中的文本与标签中的文本相同

拆分pandas列并创建包含这些拆分值计数的新列

Pandas 除以一列中出现的每个值

如何用symy更新分段函数

当多个值具有相同模式时返回空

为什么我的Python代码在if-else声明中的行之前执行if-else声明中的行?

Pandas 滚动最接近的价值

运行总计基于多列pandas的分组和总和

如何让Flask 中的请求标签发挥作用

log 1 p numpy的意外行为

多处理队列在与Forking http.server一起使用时随机跳过项目

为什么Django管理页面和我的页面的其他CSS文件和图片都找不到?'

合并帧,但不按合并键排序