折叠熊猫 MultiIndex
Posted
技术标签:
【中文标题】折叠熊猫 MultiIndex【英文标题】:collapse a pandas MultiIndex 【发布时间】:2016-09-02 09:23:30 【问题描述】:假设我有一个 DataFrame
和 MultiIndex
列。如何将级别折叠为值的串联,以便我只有一个级别?
设置
np.random.seed([3, 14])
col = pd.MultiIndex.from_product([list('ABC'), list('DE'), list('FG')])
df = pd.DataFrame(np.random.rand(4, 12) * 10, columns=col).astype(int)
print df
A B C
D E D E D E
F G F G F G F G F G F G
0 2 1 1 7 5 9 9 2 7 4 0 3
1 3 7 1 1 5 3 1 4 3 5 6 0
2 2 6 9 9 9 5 7 0 1 2 7 5
3 2 2 8 0 3 9 4 7 0 8 2 5
我希望结果如下所示:
ADF ADG AEF AEG BDF BDG BEF BEG CDF CDG CEF CEG
0 2 1 1 7 5 9 9 2 7 4 0 3
1 3 7 1 1 5 3 1 4 3 5 6 0
2 2 6 9 9 9 5 7 0 1 2 7 5
3 2 2 8 0 3 9 4 7 0 8 2 5
【问题讨论】:
【参考方案1】:解决方案
我做了这个
def collapse_columns(df):
df = df.copy()
if isinstance(df.columns, pd.MultiIndex):
df.columns = df.columns.to_series().apply(lambda x: "".join(x))
return df
我必须检查它是否为MultiIndex
,因为如果不是,我将拆分一个字符串并将其与我在join
中选择的任何分隔符重新组合。
【讨论】:
受到您的解决方案的启发,我想到了这个:df.columns.to_series().str.join('')
【参考方案2】:
你可以试试这个:
In [200]: cols = pd.Series(df.columns.tolist()).apply(pd.Series).sum(axis=1)
In [201]: cols
Out[201]:
0 ADF
1 ADG
2 AEF
3 AEG
4 BDF
5 BDG
6 BEF
7 BEG
8 CDF
9 CDG
10 CEF
11 CEG
dtype: object
【讨论】:
【参考方案3】:df.columns = df.columns.to_series().apply(''.join)
这不会产生分隔符,但您可以在 '_' 中替换 '' 或任何其他您可能想要的分隔符。
【讨论】:
以上是关于折叠熊猫 MultiIndex的主要内容,如果未能解决你的问题,请参考以下文章