python - Pandas:将数据框中的列与为公共(public)变量创建的新列合并

标签 python pandas dataframe

我有以下数据框:

ID,SomeValue,FooA1,FooA2,FooA3,FooB1,FooB2,FooB3,BarA1,BarA2,BarA3,BarB1,BarB2,BarB3
1 ,val1     ,4    ,7    ,2    ,8    ,1    ,3    ,2    ,9    ,2    ,0    ,9    ,2
2 ,val2     ,2    ,3    ,8    ,     ,     ,     ,1    ,5    ,3    ,     ,     , 
.
.

我想合并列“[Foo|Bar][A|B]\d+”,使它们成为以下内容,即合并多个列的不同组合并创建适当的新列来包含代表这些变化的变量:

ID,SomeValue,FooBar    ,AB    ,Num    ,Val
1 ,val1     ,Foo       ,A     ,1      ,4
1 ,val1     ,Foo       ,A     ,2      ,7
1 ,val1     ,Foo       ,A     ,3      ,2
1 ,val1     ,Foo       ,B     ,1      ,8
1 ,val1     ,Foo       ,B     ,2      ,1
1 ,val1     ,Foo       ,B     ,3      ,3
1 ,val1     ,Bar       ,A     ,1      ,2
1 ,val1     ,Bar       ,A     ,2      ,9
1 ,val1     ,Bar       ,A     ,3      ,2
1 ,val1     ,Bar       ,B     ,1      ,0
1 ,val1     ,Bar       ,B     ,2      ,9
1 ,val1     ,Bar       ,B     ,3      ,2
2 ,val2     ,Foo       ,A     ,1      ,2
2 ,val2     ,Foo       ,A     ,2      ,3
2 ,val2     ,Foo       ,A     ,3      ,8
2 ,val2     ,Bar       ,A     ,1      ,1
2 ,val2     ,Bar       ,A     ,2      ,5
2 ,val2     ,Bar       ,A     ,3      ,3

请注意,可以有空值,例如上面第 2 行中的值,这些值不应包含在最终集中。

这一定是相当简单的事情,但我是 pandas 的新手,正在努力寻找正确的命令来使用。

预先感谢您的帮助。

最佳答案

您可以使用:


df = df.set_index(['ID','SomeValue']).stack().reset_index(name='Val')
df[['FooBar','AB','Num']] = df.pop('level_2').str.extract('(Foo|Bar)(A|B)(\d+)', expand=True)
cols = ['ID', 'SomeValue', 'FooBar', 'AB', 'Num','Val']
df = df.reindex_axis(cols, axis=1)
print (df)
    ID SomeValue FooBar AB Num  Val
0    1      val1    Foo  A   1  4.0
1    1      val1    Foo  A   2  7.0
2    1      val1    Foo  A   3  2.0
3    1      val1    Foo  B   1  8.0
4    1      val1    Foo  B   2  1.0
5    1      val1    Foo  B   3  3.0
6    1      val1    Bar  A   1  2.0
7    1      val1    Bar  A   2  9.0
8    1      val1    Bar  A   3  2.0
9    1      val1    Bar  B   1  0.0
10   1      val1    Bar  B   2  9.0
11   1      val1    Bar  B   3  2.0
12   2      val2    Foo  A   1  2.0
13   2      val2    Foo  A   2  3.0
14   2      val2    Foo  A   3  8.0
15   2      val2    Foo  B   1  1.0
16   2      val2    Foo  B   2  5.0
17   2      val2    Foo  B   3  3.0

关于python - Pandas:将数据框中的列与为公共(public)变量创建的新列合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45649638/

相关文章:

python - 字符串值错误错误 - Python + mariaDB

python - 在 pandas 组内分配分位数

python - Pandas DataFrame Apply 函数,多个参数

python - 强制 Python Pandas DataFrame( read_csv() 方法)避免/不将我的 csv/txt 文件的第一行视为标题

python - 访问 xrange 内部结构

python - 在python中将csv对象时间解析为日期时间

python - 如何更改使用 Matplotlib 绘制的图形的大小?

python - 使用应用于数据框中每一列的多个参数的自定义函数

Python - Pandas - 数据框 : Row Specific Conditional Column Offset

python - 对公司名称的 DataFrame 进行非规范化 [第 1 部分]