我有一个很大的数据框,我存储了很多冗余值,这使得我很难处理我的数据。我有以下形式的数据框:
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/