【问题标题】:Creating new columns based on another column in pandas根据熊猫中的另一列创建新列
【发布时间】:2023-02-05 23:12:22
【问题描述】:

我正在研究下面的 df

timestamp   conversationId   UserId  MessageId      tpMessage   Message 
1614578324  ceb9004ae9d3    1c376ef 5bbd34859329    question    Where do you live?
1614578881  ceb9004ae9d3    1c376ef d3b5d3884152    answer      Brooklyn
1614583764  ceb9004ae9d3    1c376ef 0e4501fcd61f    question    What's your name?
1614590885  ceb9004ae9d3    1c376ef 97d841b79ff7    answer      Phill
1614594952  ceb9004ae9d3    1c376ef 11ed3fd24767    question    What's your gender?
1614602036  ceb9004ae9d3    1c376ef 601538860004    answer      Male
1614602581  ceb9004ae9d3    1c376ef 8bc8d9089609    question    How old are you?
1614606219  ceb9004ae9d3    1c376ef a2bd45e64b7c    answer      35
1614606240  jto9034pe0i5    1c489rl o6bd35e64b5j    question    What's your name?
1614606250  jto9034pe0i5    1c489rl 96jd89i55b72    answer      Robert
1614606267  jto9034pe0i5    1c489rl 33yd1445d6ut    answer      Brandom
1614606287  jto9034pe0i5    1c489rl b7q489iae77t    answer      Connor

我需要根据 tpMessage 列“拆分”2 中的时间戳列,条件是:

df['ts_question'] = np.where(df['tpMessage']=='question', df['timestamp'],0)
df['ts_answer'] = np.where(df['tpMessage']=='answer', df['timestamp'],0)

当条件不匹配时,这为我提供了两列的“0”值,之后我陷入了如何前进的困境

我的目标是获得此输出:

ts_question ts_answer   conversationId   UserId
1614578324  1614578881  ceb9004ae9d3    1c376ef
1614583764  1614590885  ceb9004ae9d3    1c376ef
1614594952  1614602036  ceb9004ae9d3    1c376ef
1614602581  1614606219  ceb9004ae9d3    1c376ef
1614606240  1614606250  jto9034pe0i5    1c489rl
1614606240  1614606267  jto9034pe0i5    1c489rl
1614606240  1614606287  jto9034pe0i5    1c489rl

请注意,对于“你叫什么名字”这个问题,我可以有 1 个或多个答案?

【问题讨论】:

  • 您可以使用 apply 函数并向其传递一个 lambda 函数,该函数将行作为参数。见here

标签: python pandas dataframe


【解决方案1】:

你可以使用merge

# Assuming dataframe is already sorted by timestamp)
df['thread'] = df['tpMessage'].eq('question').cumsum()

# Split your data in two new dataframes: questions and answers
dfq = df[df['tpMessage'] == 'question'].rename(columns={'timestamp': 'ts_question'})
dfa = df[df['tpMessage'] == 'answer'].rename(columns={'timestamp': 'ts_answer'})

# Merge them on conversation, user id and thread
cols = ['ts_question', 'ts_answer', 'conversationId', 'UserId']
out = dfa.merge(dfq, on=['conversationId', 'UserId', 'thread'], how='outer')[cols]

输出:

>>> out
   ts_question   ts_answer conversationId   UserId
0   1614578324  1614578881   ceb9004ae9d3  1c376ef
1   1614583764  1614590885   ceb9004ae9d3  1c376ef
2   1614594952  1614602036   ceb9004ae9d3  1c376ef
3   1614602581  1614606219   ceb9004ae9d3  1c376ef
4   1614606240  1614606250   jto9034pe0i5  1c489rl
5   1614606240  1614606267   jto9034pe0i5  1c489rl
6   1614606240  1614606287   jto9034pe0i5  1c489rl

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 2022-12-16
    • 2020-07-07
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 2019-12-27
    相关资源
    最近更新 更多