【问题标题】:Elongating a Data Frame in Pandas在 Pandas 中拉长数据框
【发布时间】:2021-06-05 05:40:28
【问题描述】:

全部。我正在使用 nps_chat 语料库进行个人 NLP/NLU 项目。我正在努力确定提出的所有问题,然后做一些进一步的分析。

这是一个相当大的数据集,格式如下:

Data columns (total 4 columns):
 #   Column               Dtype 
---  ------               ----- 
 0   episode              int64 
 1   episode_order        int64 
 2   speaker              object
 3   utterance            object
dtypes: int64(2), object(1)

对于每一集,说话者的一系列话语在 episode_order 列中排序。

我已经对每个话语进行了句子标记,并确定了每个话语中的任何问题。这些问题作为列表存储在称为“问题”的第 5 列中。大多数行都有一个空列表 [],其他行的范围从一个问题的列表到一系列问题的列表。

我要解决的问题: 我想在话语包含多个问题的行中拉长数据框。在一行包含多个问题的每个位置,我想:

  1. 只保留原始行中提出的第一个问题
  2. 在原始行下方添加额外的行,每行包含列表中的剩余问题之一。该行是原始行中所有列的副本,但“问题”列包含下一个问题。

--感谢下面回答的用户-- 这是我想要实现的目标。

import pandas as pd
df = pd.DataFrame(
     {
        "episodes" : [1, 2], 
        "utterance": ["hey", "ho"],
        "questions": [['Where?', "Who?"], ["What?", "When?"]]
     }
)

df
>>>
    episodes    utterance   questions
0   1           hey         [Where?, Who?]
1   2           ho          [What?, When?]

    episodes    utterance   questions
0   1           hey         Where?
0   1           hey         Who?
1   2           ho          What?
1   2           ho          When?

对此最好的方法是什么?我正在尝试通过应用/lambda 解决方案进行思考。我还考虑过依次遍历数据框并制作一整集,将其传递给一个函数,按照描述拉长它并返回它......然后将其附加到一个新的数据框。此数据集中有 3M 行,因此可能需要一段时间。

感谢任何建议。谢谢!

【问题讨论】:

标签: python pandas dataframe


【解决方案1】:

也许这就是你要找的东西?

import pandas as pd
df = pd.DataFrame(
    {
        "episodes" : [1, 2], 
        "utterance": ["hey", "ho"],
        "questions": [['Where?', "Who?"], ["What?", "When?"]]
    }
)

df
>>>
    episodes    utterance   questions
0   1           hey         [Where?, Who?]
1   2           ho          [What?, When?]


df.explode('questions')
>>>
    episodes    utterance   questions
0   1           hey         Where?
0   1           hey         Who?
1   2           ho          What?
1   2           ho          When?

【讨论】:

  • 是的,感谢您让我的问题对其他人更清楚,并同时回答。我很感激,会试试这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 2016-09-19
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多