python - Pandas - 将列值拆分为新列

标签 python pandas dataframe

我有一个很大的数据框,我存储了很多冗余值,这使得我很难处理我的数据。我有以下形式的数据框:

import pandas as pd

df = pd.DataFrame([["a","g","n1","y1"], ["a","g","n2","y2"], ["b","h","n1","y3"], ["b","h","n2","y4"]], columns=["meta1", "meta2", "name", "data"])

>>> df

  meta1 meta2 name data
    a     g   n1   y1
    a     g   n2   y2
    b     h   n1   y3
    b     h   n2   y4

我在 name 中有我想要的新列的名称,在 data 中有相应的数据。

我想生成以下形式的数据框:

df = pd.DataFrame([["a","g","y1","y2"], ["b","h","y3","y4"]], columns=["meta1", "meta2", "n1", "n2"])

>>> df

meta1 meta2  n1  n2
  a     g  y1  y2
  b     h  y3  y4

名为 meta 的列大约有 15 个以上的其他列包含大部分数据,我认为它们不是特别适合索引。我的想法是,目前我在 meta 中存储了大量重复/冗余数据,我想生成呈现的更紧凑的数据框。

我发现了一些类似的问题,但无法确定我需要执行哪种操作:旋转、重新索引、堆栈或取消堆栈等?

PS - 原始索引值对我来说并不重要。

如有任何帮助,我们将不胜感激。

我认为相关的问题:

我认为以下问题与我正在尝试做的事情有关,但我看不到如何应用它,因为我不想生成更多索引。

最佳答案

如果您将元列分组到一个列表中,那么您可以这样做:

metas = ['meta1', 'meta2']

new_df = df.set_index(['name'] + metas).unstack('name')
print new_df

            data    
name          n1  n2
meta1 meta2         
a     g       y1  y2
b     h       y3  y4

这让你大部分时间都在那里。额外的定制可以帮助您完成剩下的工作。

print new_df.data.rename_axis([None], axis=1).reset_index()

  meta1 meta2  n1  n2
0     a     g  y1  y2
1     b     h  y3  y4

关于python - Pandas - 将列值拆分为新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37840043/

相关文章:

python - Pandas DataFrame 的嵌套(双)行逐行迭代

Python:根据条件划分列表的元素

python - 持续处理子进程中的大量 stdout 和 stderr

python - 如何将 pandas 数据框中的字符串设置在所有行的相同位置?

Python:缺少行的多个 ID 的累积和

python - 通过比较 pandas 中的一列或多列进行 bool 切片

R - 使用循环搜索一个变量与另一个变量并创建新的合并变量

python - Cherrypy 应用程序重定向到 http 而不是 nginx 后面的 https

python - 在两个索引(日期时间和日期)上合并两个具有部分公共(public)元素的不相等数据帧

python - Pandas 数据帧 : how to find missing years in a timeseries?