Python 如何通过将现有数据框的一些列组合在一起来创建新的数据框?
我有一个数据帧df,如图所示: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
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