首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将列组和熊猫数据堆在一起?

如何将列组和熊猫数据堆在一起?
EN

Stack Overflow用户
提问于 2020-09-17 22:13:06
回答 4查看 162关注 0票数 1

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

代码语言:javascript
复制
State   Homicides  State2   Homicides2
-----------------------------------------
Cal       1         Mas         5
Tex       2         NY          6
Tenn      3         Chi         7 
Pen       4         Mon         8

我想在下面的"State2“和"Homicides2”栏中添加"State“和"Homicides”

代码语言:javascript
复制
State   Homicides  
------------------
Cal       1         
Tex       2        
Tenn      3         
Pen       4         
Mas       5
NY        6
Chi       7 
Mon       8

我尝试了取消列表和堆栈,但我不知道如何做多列,谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-09-17 22:32:12

name.

  • 使用.iloc来选择组。之所以使用
    • .iloc,是因为选择columns.
    • Alternatively,的相邻组似乎更容易按名称选择列(例如,df[['State','Homicides']])

)

  • 技巧是将第二组的列与第一组的名称相匹配。

代码语言:javascript
复制
import pandas as pd

# setup test dataframe
df = pd.DataFrame({'State': ['Cal', 'Tex', 'Tenn', 'Pen'], 'Homicides': [1, 2, 3, 4], 'State2': ['Mas', 'NY', 'Chi', 'Mon'], 'Homicides2': [5, 6, 7, 8]})

# concat the 2 sets of columns
df = pd.concat([df.iloc[:, 0:2], df.iloc[:, 2:4].rename(columns={'State2': 'State', 'Homicides2': 'Homicides'})]).reset_index()

display(df)

  State  Homicides
0   Cal          1
1   Tex          2
2  Tenn          3
3   Pen          4
4   Mas          5
5    NY          6
6   Chi          7
7   Mon          8
票数 0
EN

Stack Overflow用户

发布于 2020-09-17 22:32:35

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

代码语言:javascript
复制
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以删除不需要的列并修复命名

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-09-18 00:25:51

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

首先,我们需要重命名列标题,以创建具有公共“存根”的列的格式。

代码语言:javascript
复制
# 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)

外:

代码语言:javascript
复制
      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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63946801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档