【发布时间】:2017-02-01 11:23:06
【问题描述】:
在我的工作流程中的某个时刻,我最终得到了一个带有一些列和一些行的常规 pandas DataFrame。我想使用df.to_latex() 将此 DataFrame 导出到乳胶表中。这很好用,但是,我知道要使用多列,其中某些列是多表的一部分。例如,一个包含 a、b、c、d、e 列的 DataFrame 我想保留 a 列,但将 b 和 c 以及 d 和 e 分组。
import numpy as np
import pandas as pd
# where I am
data = np.arange(15).reshape(3, 5)
df = pd.DataFrame(data=data, columns=['a', 'b', 'c', 'd', 'e'])
看起来像这样:
In [161]: df
Out[161]:
a b c d e
0 0 1 2 3 4
1 5 6 7 8 9
2 10 11 12 13 14
我想对 b 和 c 列以及 d 和 e 列进行分组,但不考虑 a。所以我想要的输出应该是这样的。
# where I want to be: leave column 'a' alone, group b&c as well as d&e
multi_index = pd.MultiIndex.from_tuples([
('a', ''),
('bc', 'b'),
('bc', 'c'),
('de', 'd'),
('de', 'e'),
])
desired = pd.DataFrame(data, columns=multi_index)
看起来像这样:
In [162]: desired
Out[162]:
a bc de
b c d e
0 0 1 2 3 4
1 5 6 7 8 9
2 10 11 12 13 14
为了到达那里,我尝试了一个简单的重新索引。这给了我想要的形状,但所有列都只得到 NaN 作为值。
# how can use df and my multiindexreindex to multi column DataFrame
result = df.reindex(columns=multi_index)
结果看起来像描述的那样,正确的索引,但都是 NaN
In [166]: result
Out[166]:
a bc de
b c e e
0 NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN
我怎样才能得到我想要的结果?
【问题讨论】:
-
reindex将不起作用。它获取带有当前索引的当前帧并对其进行排列,以便新帧将按照传递的索引的顺序具有索引。它不会神奇地从单个索引对齐到多索引。你得到所有的 NaN 因为在原始帧中的位置[0, (a, None)]或[0, (bc, b)](等)没有数据。我看不出pd.DataFrame(data, columns=multi_index)有什么问题。如果没有,总会有可敬的groupby... -
@Kartik TY 用于输入。我不能简单地做
pd.DataFrame(data, columns=multi_index),因为我只有df,而不是data本身。这只是显示我想要到达的所需结果的代码。
标签: python pandas dataframe multi-index reindex