多索引上的熊猫数据框 groupby
Posted
技术标签:
【中文标题】多索引上的熊猫数据框 groupby【英文标题】:pandas dataframe groupby on multiindex 【发布时间】:2018-08-01 17:23:59 【问题描述】:我正在使用 Pandas 数据框来读取 excel 文件并对其进行一些操作。我有一个包含多行的标题,现在我想按几个列值分组。但是我无法找到解决方案。
Excel 示例:
name address contact_info
first_name last_name street city mobile email
1 AAA BBB XXX YYY 102020 aaa@xyz.com
2 111 222 333 444 239393 bbb@xyz.com
3 BBB 333 XXX dddd 102020 aaa@xyz.com
我想按街道名称分组并从其他列中查找值 我试过了,但它无法找到街道,因为它是多索引。
df = pd.read_excel("test.xlsx", header=[0, 1], sheet_name="Sheet1")
print df.groupby("street", level=-1)[["first_name", "last_name", "email"]].apply(list)
【问题讨论】:
看起来你实际上并不需要第一行——那种重复的信息。如果您在没有第一行 (header=1) 或 (skiprows=1) 的情况下阅读它,您将不必处理多索引...让您的工作更轻松。 【参考方案1】:您需要在各处提供元组列表:
cols = [
('name', 'first_name'),
('name', 'last_name'),
('contact_info', 'email')
]
df.groupby([('address', 'street')])[cols].apply(pd.Series.tolist)
# or, alternatively,
# df.groupby(df.address.street)[cols].apply(pd.Series.tolist)
(address, street)
333 [[111, 222, bbb@xyz.com]]
XXX [[AAA, BBB, aaa@xyz.com], [BBB, 333, aaa@xyz.c...
元组指定MultiIndex
列选择。
【讨论】:
我收到以下错误TypeError: unbound method tolist() must be called with Series instance as first argument (got DataFrame instance instead)
@GaurangShah 试试.apply(lambda x: x.values.tolist())
。
@COLDSPEED 除了这样做之外,还有什么方法可以获取街道(第一列值)。 df.T.index.values.T.tolist()
@GaurangShah 您的预期结果是什么?我不清楚……顺便说一句,如果答案有帮助,您也可以投票赞成。谢谢!
@jezrael 不合理......我已经为你扭转了它。以上是关于多索引上的熊猫数据框 groupby的主要内容,如果未能解决你的问题,请参考以下文章