簡體   English   中英

Python groupby-根據其他列中的值創建一個新列

[英]Python groupby - Create a new column based on values in other columns

我有一個非常大的數據框。
我想首先按“ id”列進行分組。
然后根據其他現有列創建一個新列“ reply_time”。

import pandas as pd
import numpy as np

id = ['793601486525702000','793601486525702000','793601710614802000','793601355214561000','793601355214561000','793601355214561000','793601355214561000','788130215436230000','788130215436230000','788130215436230000','788130215436230000','788130215436230000']
time = ['11/1/2016 16:53','11/1/2016 16:53','11/1/2016 16:52','11/1/2016 16:55','11/1/2016 16:53','11/1/2016 16:53','11/1/2016 16:51','11/1/2016 3:09','11/1/2016 3:04','11/1/2016 2:36','11/1/2016 2:08','11/1/2016 0:28']
reply = ['3','3','0','3','3','2','1','3','2','3','3','1']

df = pd.DataFrame({"id": id, "time": time, "reply": reply})

        id                 time       reply 
793601486525702000  11/1/2016 16:53     3       
793601486525702000  11/1/2016 16:53     3       
793601710614802000  11/1/2016 16:52     0       
793601355214561000  11/1/2016 16:55     3       
793601355214561000  11/1/2016 16:53     3       
793601355214561000  11/1/2016 16:53     2       
793601355214561000  11/1/2016 16:51     1   
788130215436230000  11/1/2016 3:09      3       
788130215436230000  11/1/2016 3:04      2       
788130215436230000  11/1/2016 2:36      3       
788130215436230000  11/1/2016 2:08      3       
788130215436230000  11/1/2016 0:28      1   

此新列“ reply_time”中有兩種類型的值。

  1. 'time':首先按'id'列進行分組,如果reply ='1',則返回reply ='2'的'time'值。
  2. 'na':如果不滿足上述條件,則應將其余行分配給'na'。

在這種情況下,我的輸出數據幀將是:

        id                 time       reply   reply_time
793601486525702000  11/1/2016 16:53     3        na
793601486525702000  11/1/2016 16:53     3        na
793601710614802000  11/1/2016 16:52     0        na
793601355214561000  11/1/2016 16:55     3        na
793601355214561000  11/1/2016 16:53     3        na
793601355214561000  11/1/2016 16:53     2        na
793601355214561000  11/1/2016 16:51     1    11/1/2016 16:53
788130215436230000  11/1/2016 3:09      3        na
788130215436230000  11/1/2016 3:04      2        na
788130215436230000  11/1/2016 2:36      3        na
788130215436230000  11/1/2016 2:08      3        na
788130215436230000  11/1/2016 0:28      1    11/1/2016 3:04 

我不知道實現此目標的最佳方法。 有人可以幫忙嗎?

提前致謝!

切片后嘗試mergereplace

yourdf=df.merge(df.query("reply=='2'").replace({'reply':{'2':'1'}}).rename(columns={'time':'reply_time'}),how='left')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM