【问题标题】:Unnest a Pandas Series without creating a combinatoric product在不创建组合产品的情况下取消嵌套 Pandas 系列
【发布时间】:2020-10-20 10:45:20
【问题描述】:

我有:

df = pd.DataFrame(
    {
     "A": [["a", "b", "c"], ["d"]], 
     "B": [[1, 2, 3], [4]], 
     "C": [["abc"], ["def"]]
    }
)
     A          B           C
0   [a, b, c]   [1, 2, 3]   [abc]
1   [d]         [4]         [def]

我的预期输出是:

   A  B  C
0  a  1  abc
1  b  2  abc
2  c  3  abc
3  d  4  def

我试过了

df = df.explode("A")
df = df.explode("B")

但它会创建一个“组合产品”并保留索引。

【问题讨论】:

标签: python pandas dataframe series


【解决方案1】:

您可以将df.applypd.Series.explode 一起使用

df.apply(pd.Series.explode) #.reset_index(drop=True) If required.

   A  B    C
0  a  1  abc
0  b  2  abc
0  c  3  abc
1  d  4  def

【讨论】:

  • 哇!正如所说的那样,确实存在更简单和优雅的解决方案。投票赞成:-)
  • 谢谢@moys ;) 你的回答也不错+1。
【解决方案2】:

可能有一个更简单的解决方案,但你现在可以试试这个

newdf=df.explode("A")
newdf['B'] = df.explode("B")['B']
newdf['C'] = newdf['C'].str[0]
newdf.reset_index(drop=True)

输出

    A   B   C
0   a   1   abc
1   b   2   abc
2   c   3   abc
3   d   4   def

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-03
    • 2022-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多