如何在和dataframe中堆叠列组?

2024-05-16 10:24:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道怎么做,但我有一个这样的数据框

State   Homicides  State2   Homicides2
-----------------------------------------
Cal       1         Mas         5
Tex       2         NY          6
Tenn      3         Chi         7 
Pen       4         Mon         8

我想在“州”和“凶杀案”后面加上“州2”和“凶杀案2”两栏

State   Homicides  
------------------
Cal       1         
Tex       2        
Tenn      3         
Pen       4         
Mas       5
NY        6
Chi       7 
Mon       8

我试过使用unlist和stack,但我不知道如何对多个列执行此操作, 谢谢


Tags: 数据caltexmasstatemonpenny
3条回答

您可以使用melt()按名称堆叠列

df.melt(['State','State2'])

    State   State2  variable    value
0   Cal Mas Homicides   1
1   Tex NY  Homicides   2
2   Tenn    Chi Homicides   3
3   Pen Mon Homicides   4
4   Cal Mas Homicides2  5
5   Tex NY  Homicides2  6
6   Tenn    Chi Homicides2  7
7   Pen Mon Homicides2  8

包括droprename以删除不需要的列并修复命名

df.melt(['State','State2']).drop(['State2','variable'], axis=1).rename({'value':'Homicides'}, axis=1)

    State   Homicides
0   Cal     1
1   Tex     2
2   Tenn    3
3   Pen     4
4   Cal     5
5   Tex     6
6   Tenn    7
7   Pen     8

您可以选择所需的列:

result=pd.concat([df[['States','Homicides']], df[['States2','Homicides2']]])

让我们使用pd.wide_to_long来处理这种同时熔化的情况

首先,我们需要重命名列标题,为列创建一种格式,使其具有公共“存根”

# Here we are adding '1' on the end of columns without the number 2 on thend
df = df.rename(columns=lambda x: x+'1' if x[-1] != '2' else x)

# Now, let's reshape using pd.wide_to_long
pd.wide_to_long(df.reset_index(), ['State', 'Homicides'], 'index', 'No').reset_index(level=1, drop=True)

乌普图特:

      State  Homicides
index                 
0       Cal        1.0
1       Tex        2.0
2      Tenn        3.0
3       Pen        4.0
0       Mas        5.0
1        NY        6.0
2       Chi        7.0
3       Mon        8.0

相关问题 更多 >