我有一个很大的dataframe,我存储了很多冗余的值,这使得处理我的数据变得很困难。我有一个如下形式的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
中有相应的数据。
我想生成如下形式的 Dataframe :
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
中,我想生成更紧凑的dataframe。
我发现了一些类似的问题,但不能确定我需要做什么样的操作:pivot、re-index、stack或unstack等?
PS -原始索引值对我的目的不重要。
任何帮助都将不胜感激。
我认为相关的问题:
我认为下面的Q与我正在尝试做的事情有关,但我不知道如何应用它,因为我不想产生更多的索引。
3条答案
按热度按时间bogh5gae1#
如果你把你的 meta列分组到一个列表中,那么你可以这样做:
这让你走完了大部分的路。额外的剪裁可以让你走完剩下的路。
62o28rlo2#
您可以将
pivot_table
与reset_index
和rename_axis
一起使用(pandas
0.18.0
中的新功能):但更好的是使用
aggfunc
join
:解释一下,为什么
join
通常比first
更好:如果使用
first
,您可以通过index
丢失每个组中不是第一个的所有数据,但join
将它们连接起来:col17t5w3#
您也可以使用
DataFrame.pivot
:输出:
我使用的是
pandas
版本1.5.3
。