Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过将现有数据框的一些列组合在一起来创建新的数据框?_Python_Pandas_Dataframe - Fatal编程技术网

Python 如何通过将现有数据框的一些列组合在一起来创建新的数据框?

Python 如何通过将现有数据框的一些列组合在一起来创建新的数据框?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧df,如图所示: 1-1 1-2 1-3 2-1 2-2 3-1 3-2 4-1 5-1 10 3 9 1 3 9 33 10 11 21 31 3 22 21 13 11 7 13 33 22 61 31 35 34 8 10

我有一个数据帧df,如图所示:

1-1    1-2    1-3    2-1    2-2    3-1    3-2    4-1    5-1
10      3      9      1     3       9      33     10     11
21      31     3      22    21      13     11     7      13
33      22     61     31    35      34     8      10     16
6       9      32     5      4      8      9      6      8
其中,列的解释如下所示:

第一个数字是一个组号,第二个数字是它的一部分或子组。在我们的示例中,我们有组1,2,3,4,5,组1由1-1,1-2,1-3组成

我想创建一个新的数据帧,只包含组1、2、3、4、5,不包含子组,并为每行选择子组中的最大数量,并灵活地进行任何新的修改或增加组或子组

我需要的新数据帧如下所示:

1    2    3    4    5
10   3    33   10   11
31   22   13   7    13
61   35   34   10   16
32   5    9    6    8

您可以使用
axis=1
和lambda函数按列进行聚合以进行拆分,并使用
max
和选择第一个值:

如果组数包含2个或更多数字,则此工作正常

df1 = df.groupby(lambda x: x.split('-')[0], axis=1).max()
另一种方法是传递拆分的列名称:

df1 = df.groupby(df.columns.str.split('-').str[0], axis=1).max()

print (df1)
    1   2   3   4   5
0  10   3  33  10  11
1  31  22  13   7  13
2  61  35  34  10  16
3  32   5   9   6   8
您可以在这里使用或


拆分
是多余的,除非OP的数字超过1位。回答很好。@Ch3steR-是的,在示例数据中,但对于一般解决方案,我更喜欢它。@Ch3steR-yop,同意,很难知道OP think数字是否应该以
10-
df.groupby(df.columns.str[0], axis=1).max())

    1   2   3   4   5
0  10   3  33  10  11
1  31  22  13   7  13
2  61  35  34  10  16
3  32   5   9   6   8