python - 按对象将 pandas 组转换为多索引 Dataframe

标签 python group-by dataframe pandas multi-index

如果我有以下数据框

>>> df = pd.DataFrame({'Name': ['Bob'] * 3 + ['Alice'] * 3, \
'Destination': ['Athens', 'Rome'] * 3, 'Length': np.random.randint(1, 6, 6)}) 
>>> df    
  Destination  Length   Name
0      Athens       3    Bob
1        Rome       5    Bob
2      Athens       2    Bob
3        Rome       1  Alice
4      Athens       3  Alice
5        Rome       5  Alice

我可以按名称和目的地进行组合...

>>> grouped = df.groupby(['Name', 'Destination'])
>>> for nm, gp in grouped:
>>>     print nm
>>>     print gp
('Alice', 'Athens')
  Destination  Length   Name
4      Athens       3  Alice
('Alice', 'Rome')
  Destination  Length   Name
3        Rome       1  Alice
5        Rome       5  Alice
('Bob', 'Athens')
  Destination  Length Name
0      Athens       3  Bob
2      Athens       2  Bob
('Bob', 'Rome')
  Destination  Length Name
1        Rome       5  Bob

但我想要一个新的多索引数据框,看起来像

                Length
Alice   Athens       3
        Rome         1
        Rome         5
Bob     Athens       3
        Athens       2
        Rome         5

似乎应该有一种方法可以执行类似Dataframe(grouped) 的操作来获取我的多索引 Dataframe,但我得到的是 PandasError(“DataFrame 构造函数没有正确调用!”)。

最简单的方法是什么?另外,有人知道是否可以选择将 groupby 对象传递给构造函数,或者我只是做错了?

谢谢

最佳答案

由于您没有聚合类似索引的行,请尝试使用列名列表设置索引。

In [2]: df.set_index(['Name', 'Destination'])
Out[2]: 
                   Length
Name  Destination        
Bob   Athens            3
      Rome              5
      Athens            2
Alice Rome              1
      Athens            3
      Rome              5

关于python - 按对象将 pandas 组转换为多索引 Dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14301913/

相关文章:

sql - 在结果集中查找最近的日期

python - 在 Pandas DataFrame 中查找数字最接近的行

python - 在解析 JSON 文件数据时,根据 Python 中的配置文件中提到的位置添加具有空值的缺失字段

python - 从可用数据结构生成二元决策图

python - 递归日志记录使 Python 3 中的解释器崩溃

sql - Teradata 按时间间隔分组

sql - 如何选择 SUM() + Group By 之后的最大值?

Python检测数据帧中的零交叉

Python ElementTree XML 解析与多个答案

python - Python 列表中最长的元素链