在 Pandas 中熔化列分组
Melt column groupings in Pandas
我有一个如下所示的数据框:
df1 = pd.DataFrame([('company1',15,20,40,33,5, 9, 81, 34, 7), ('company2', 5,7,10,20,31, 14,18,37,42)],
columns=['company','legs - dog', 'head - dog', 'tail - dog','legs - cat', 'head - cat', 'tail - cat','legs - rabbit', 'legs - rabbit', 'tail - rabbit'])
我希望输出是这样的:
df2 = pd.DataFrame([('company1','dog', 15,20,40), ('company1','cat', 33,5,9),('company1','rabbit', 81,34,7),('company2','dog', 5,7,10), ('company2','cat', 20,31,14), ('company2','rabbit', 18,37,42) ],
columns=['company','animal', 'legs', 'head','tail'])
我想将 df1 中的第一列保留为 df2 中的第一列。 df1 中的其他列分组(在这种情况下,每组三列)。
这些组中的列标题具有我需要拆分的复合列名称。例如,df1 中的第二列具有标签 'legs - dog'。分组列的每个名称都是字符串,由“-”分隔。我需要连字符之前的字符串的第一部分(在本例中为 'legs')成为列名,而 df1 中分组列名的字符串的第二部分(在本例中为 'dog')成为列名为 'animals'.
的新行的元素
如果您能帮助找到解决方案,我们将不胜感激。谢谢!
pd.wide_to_long
我们可以在此处使用 pd.wide_to_long
函数,它是 pandas melt
函数的替代方法,并且在将数据帧从 wide 格式转换时更加用户友好 到 长格式。
pd.wide_to_long(df1, i='company', j='animal',
stubnames=['legs', 'tail', 'head'],
sep=' - ', suffix='\w+')\
.reset_index()
company animal legs tail head
0 company1 dog 15 40 20
1 company2 dog 5 10 7
2 company1 cat 33 9 5
3 company2 cat 20 14 31
4 company1 rabbit 81 7 34
5 company2 rabbit 18 42 37
我有一个如下所示的数据框:
df1 = pd.DataFrame([('company1',15,20,40,33,5, 9, 81, 34, 7), ('company2', 5,7,10,20,31, 14,18,37,42)],
columns=['company','legs - dog', 'head - dog', 'tail - dog','legs - cat', 'head - cat', 'tail - cat','legs - rabbit', 'legs - rabbit', 'tail - rabbit'])
我希望输出是这样的:
df2 = pd.DataFrame([('company1','dog', 15,20,40), ('company1','cat', 33,5,9),('company1','rabbit', 81,34,7),('company2','dog', 5,7,10), ('company2','cat', 20,31,14), ('company2','rabbit', 18,37,42) ],
columns=['company','animal', 'legs', 'head','tail'])
我想将 df1 中的第一列保留为 df2 中的第一列。 df1 中的其他列分组(在这种情况下,每组三列)。
这些组中的列标题具有我需要拆分的复合列名称。例如,df1 中的第二列具有标签 'legs - dog'。分组列的每个名称都是字符串,由“-”分隔。我需要连字符之前的字符串的第一部分(在本例中为 'legs')成为列名,而 df1 中分组列名的字符串的第二部分(在本例中为 'dog')成为列名为 'animals'.
的新行的元素如果您能帮助找到解决方案,我们将不胜感激。谢谢!
pd.wide_to_long
我们可以在此处使用 pd.wide_to_long
函数,它是 pandas melt
函数的替代方法,并且在将数据帧从 wide 格式转换时更加用户友好 到 长格式。
pd.wide_to_long(df1, i='company', j='animal',
stubnames=['legs', 'tail', 'head'],
sep=' - ', suffix='\w+')\
.reset_index()
company animal legs tail head
0 company1 dog 15 40 20
1 company2 dog 5 10 7
2 company1 cat 33 9 5
3 company2 cat 20 14 31
4 company1 rabbit 81 7 34
5 company2 rabbit 18 42 37