如何在pandas中使用groupby复制行

python pandas 匿名 | 2020-08-01 20:15:30


我在pandas中有以下数据帧。
 order_id    name     email               date         products     prod_amt     
123 Neil neil@gmail.com 2020-02-02 NaN nan
123 NaN NaN NaT ABC 120
123 NaN NaN NaT DEF 100
124 Tom tom@gmail.com 2020-03-02 NaN nan
124 NaN NaN NaT DRT 150

我想复制
name, email, date
分组依据
order_id

我想要的数据帧是
 order_id    name     email               date         products     prod_amt     
123 Neil neil@gmail.com 2020-02-02 NaN nan
123 Neil neil@gmail.com 2020-02-02 ABC 120
123 Neil neil@gmail.com 2020-02-02 DEF 100
124 Tom tom@gmail.com 2020-03-02 NaN nan
124 Tom tom@gmail.com 2020-03-02 DRT 150

我如何在pandas中做到这一点?





6 答案



来自注释:您希望对
order_id
进行分组,并为除“products”和“prod\u amt”列之外的所有列填充缺失值。
您可以根据
order_id
分组,然后删除不想更新的列,并在
df.update
下传递:
df.update(df.groupby('order_id').ffill().drop(['products','prod_amt'],axis=1))

   order_id  name           email       date products  prod_amt
0 123 Neil neil@gmail.com 2020-02-02 NaN NaN
1 123 Neil neil@gmail.com 2020-02-02 ABC 120.0
2 123 Neil neil@gmail.com 2020-02-02 DEF 100.0
3 124 Tom tom@gmail.com 2020-03-02 NaN NaN
4 124 Tom tom@gmail.com 2020-03-02 DRT 150.0

2020-08-03 01:21:17
匿名


来自注释:您希望对
order_id
进行分组,并为除“products”和“prod\u amt”列之外的所有列填充缺失值。
您可以根据
order_id
分组,然后删除不想更新的列,并在
df.update
下传递:
df.update(df.groupby('order_id').ffill().drop(['products','prod_amt'],axis=1))

   order_id  name           email       date products  prod_amt
0 123 Neil neil@gmail.com 2020-02-02 NaN NaN
1 123 Neil neil@gmail.com 2020-02-02 ABC 120.0
2 123 Neil neil@gmail.com 2020-02-02 DEF 100.0
3 124 Tom tom@gmail.com 2020-03-02 NaN NaN
4 124 Tom tom@gmail.com 2020-03-02 DRT 150.0

2020-08-02 14:41:58
匿名


来自注释:您希望对
order_id
进行分组,并为除“products”和“prod\u amt”列之外的所有列填充缺失值。
您可以根据
order_id
分组,然后删除不想更新的列,并在
df.update
下传递:
df.update(df.groupby('order_id').ffill().drop(['products','prod_amt'],axis=1))

   order_id  name           email       date products  prod_amt
0 123 Neil neil@gmail.com 2020-02-02 NaN NaN
1 123 Neil neil@gmail.com 2020-02-02 ABC 120.0
2 123 Neil neil@gmail.com 2020-02-02 DEF 100.0
3 124 Tom tom@gmail.com 2020-03-02 NaN NaN
4 124 Tom tom@gmail.com 2020-03-02 DRT 150.0

2020-08-01 20:16:00
匿名


如果您的数据帧已经按order\u id排序,则只需
对特定列调用ffill即可:
myColumns = ['name', 'email', 'date']
df.loc[:, myColumns] = df.loc[:, myColumns].ffill()

否则可以使用分组,如您所写。
定义要应用于每个组的函数:
 def myFill(grp):
grp.loc[:, myColumns] = grp.loc[:, myColumns].ffill()
return grp

然后将此函数应用于每个组:
<2]

2020-08-03 01:21:53
匿名


如果您的数据帧已经按order\u id排序,则只需
对特定列调用ffill即可:
myColumns = ['name', 'email', 'date']
df.loc[:, myColumns] = df.loc[:, myColumns].ffill()

否则可以使用分组,如您所写。
定义要应用于每个组的函数:
 def myFill(grp):
grp.loc[:, myColumns] = grp.loc[:, myColumns].ffill()
return grp

然后将此函数应用于每个组:
<2]

2020-08-02 14:42:36
匿名


如果您的数据帧已经按order\u id排序,则只需
对特定列调用ffill即可:
myColumns = ['name', 'email', 'date']
df.loc[:, myColumns] = df.loc[:, myColumns].ffill()

否则可以使用分组,如您所写。
定义要应用于每个组的函数:
 def myFill(grp):
grp.loc[:, myColumns] = grp.loc[:, myColumns].ffill()
return grp

然后将此函数应用于每个组:
<2]

2020-08-01 20:16:17
匿名


World is powered by solitude
备案号:湘ICP备19012068号