Pandas extractall() - 返回列表,而不是多级索引?

Posted

技术标签:

【中文标题】Pandas extractall() - 返回列表,而不是多级索引?【英文标题】:Pandas extractall() - return list, not a MultiLevel index? 【发布时间】:2018-06-24 18:26:31 【问题描述】:

我有一个问题,我感觉之前可能已经有人问过了,但形式不同。如果是这样,请指点我原来的。

无论如何,我正在使用 Pandas extractall() 方法,但我不太喜欢它返回具有多级索引 (original index -> 'match' index) 的 DataFrame,所有找到的元素都列在 match 0, match 1, match 2 ... 下 如果输出是单个索引 DataFrame,我宁愿选择多个正则表达式搜索结果(如果适用)作为单个单元格中的列表返回。目前可以吗?

这是我的想法的可视化:

当前输出:

                   X
index    match
  0        0      thank
  1        0      thank
           1      thanks
           2      thanking
  2        0      thanked

期望的输出

          X
index
  0      thank
  1      [thank, thanks, thanking]
  2      thanked

如有任何建议,我将不胜感激。

【问题讨论】:

样本数据可用吗? 很遗憾,我无法分享(工作相关)。我上面包含的示例反映了我对它的一般期望。 您可以模拟与您的工作数据具有相同结构的新数据 我保证我会在下一个问题中提供一些模拟数据。斯科特在下面的回答已经解决了我的问题,所以这次我不会这样做。感谢您抽出时间来了解 Dark 和 Paul H。 【参考方案1】:

我们试试吧:

df.groupby(level=0)['X'].apply(list)

输出:

0                      [thank]
1    [thank, thanks, thanking]
2                    [thanked]
Name: X, dtype: object

【讨论】:

我能否将一些像这样的 GroupBy 对象合并到一个 DataFrame 中,并保留原始索引? @Greem666 是的,你可以 pd.concat 并保持索引。 太好了。非常感谢您对我的问题的快速(而且非常容易)修复。下次必须记住 groupby() 方法是一个很好的 MultiIndex buster :)

以上是关于Pandas extractall() - 返回列表,而不是多级索引?的主要内容,如果未能解决你的问题,请参考以下文章

pandas extractall() 没有提取给定正则表达式的所有案例?

Pandas:直接从日期时间列返回小时

pandas使用nsmallest函数返回特定数据列中前N个最小值(搜寻最小的n个元素)pandas使用nsmallest函数返回特定数据列中前N个最小值所对应的数据行

pandas使用nlargest函数返回特定数据列中前N个最大值(搜寻最大的n个元素)pandas使用nlargest函数返回特定数据列中前N个最大值所对应的数据行

python 只返回某些列pandas

Pandas:连接多个 .csv 文件并返回聚合了同名列的 Dataframe