python - 如何合并 pandas 数据框中的两列,堆叠在顶部

标签 python pandas dataframe

我有一个这样的数据框:

df1
  sample x data       data y
         b              a
         d              c
         f              e
         h              g
         j              i
         l              k

我需要像这样创建一个新的数据框:

information  identifier
b       x
d       x
f       x
h       x
j       x
l       x
a       y
c       y
e       y 
g       y
i       y
k       y

这可以在 pandas 中完成吗?这就像将一列堆叠在另一列之上,但记录该列的信息类型。非常感谢。

最佳答案

使用str.split按列名,然后按 DataFrame.unstack reshape , 最后一些数据清理 DataFrame.reset_index :

#first data solution
df.columns = df.columns.str.split('_', expand=True)
df = (df.unstack()
       .reset_index(level=[1,2], drop=True)
       .rename_axis('identifier')
       .reset_index(name='data')[['data','identifier']])
print (df)
   data identifier
0     b          x
1     d          x
2     f          x
3     h          x
4     j          x
5     l          x
6     a          y
7     c          y
8     e          y
9     g          y
10    i          y
11    k          y

编辑:

如果使用 melt 然后列名创建新列:

df = df.melt(var_name='identifier', value_name='information')
print (df)
       identifier information
0   sample x data           b
1   sample x data           d
2   sample x data           f
3   sample x data           h
4   sample x data           j
5   sample x data           l
6          data y           a
7          data y           c
8          data y           e
9          data y           g
10         data y           i
11         data y           k

因此您可以提取值 xy:

df.columns = df.columns.str.extract('(x|y)', expand=False)
df = df.melt(var_name='identifier', value_name='information')
print (df)
   identifier information
0           x           b
1           x           d
2           x           f
3           x           h
4           x           j
5           x           l
6           y           a
7           y           c
8           y           e
9           y           g
10          y           i
11          y           k

关于python - 如何合并 pandas 数据框中的两列,堆叠在顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59320246/

相关文章:

python - statsmodel线性回归(ols)的稳健性问题 - Python

python - Pandas 数据帧到 JSON 格式的操作

python - 在 Pandas 中查找包含另一列的行中的特定值的列名称

python - Web 抓取规则创建

python - 如何检查 conda develop 是否安装了我的项目/包?

python - 删除值为 0 或 999999 的列

python - 获取从 DataFrame 中最后一个有效值开始计算的列中 NaN 数量的快速方法

python - 将 Pandas Data Frame 放入现有 Excel 工作表

python - 从字典中提取键值作为数据框

python - 如何使用 pyspark 创建循环来迭代连接