pandas 如何用python编程在 Dataframe 中处理这个问题

n9vozmp4  于 2023-03-06  发布在  Python
关注(0)|答案(2)|浏览(126)

| 账号|城市名称|
| - ------|- ------|
| 小行星123456||
| 小行星123456|德里|
| 小行星123456||
| 小行星123456||
| 小行星123456||
| 小行星910234||
| 小行星910234||
| 小行星910234||
| 小行星910324||
| 小行星910324|班加罗尔|
| 小行星910324||
| 小行星910324||
| 小行星360825||
| 小行星360825||
| 小行星360825||
| 小行星360825|孟买|
| 小行星360825||
| 小行星123456||
| 小行星123456||
| 小行星123456||
| 小行星123456||
| 小行星123456||
| 账号|城市名称|
| - ------|- ------|
| 小行星123456|德里|
| 小行星123456|德里|
| 小行星123456|德里|
| 小行星123456|德里|
| 小行星123456|德里|
| 小行星910234|班加罗尔|
| 小行星910234|班加罗尔|
| 小行星910234|班加罗尔|
| 小行星910324|班加罗尔|
| 小行星910324|班加罗尔|
| 小行星910324|班加罗尔|
| 小行星910324|班加罗尔|
| 小行星360825|孟买|
| 小行星360825|孟买|
| 小行星360825|孟买|
| 小行星360825|孟买|
| 小行星360825|孟买|
| 小行星123456||
| 小行星123456||
| 小行星123456||
| 小行星123456||
| 小行星123456||

r9f1avp5

r9f1avp51#

如果要基于Acc numb填充CityName,可以尝试以下操作:

import pandas as pd
import numpy as np

df = df.replace('',np.nan)

df['CityName'] = df.groupby('Acc numb',group_keys=False).apply(lambda group: group['CityName'].ffill().bfill())
    • 说明:**

此代码按Acc numb分组,并使用ffill()bfill()填充CityName中的缺失值,以便使用在该组中找到的CityName。如果某些Acc numb没有CityName,则行将保持为NaN

k2fxgqgv

k2fxgqgv2#

通过比较移位值与Series.cumsum的累积和创建连续组,并通过GroupBy.transformGroupBy.first获得新列中每组的第一个非缺失值:

  • 注意:910234910324不同,因此不使用Bangalore填充。*
g = df['Acc numb'].ne(df['Acc numb'].shift()).cumsum()
df['CityName'] = df.groupby(g)['CityName'].transform('first')
print (df)
    Acc numb   CityName
0     123456      Delhi
1     123456      Delhi
2     123456      Delhi
3     123456      Delhi
4     123456      Delhi
5     910234       None
6     910234       None
7     910234       None
8     910324  Bangalore
9     910324  Bangalore
10    910324  Bangalore
11    910324  Bangalore
12    360825     Mumbai
13    360825     Mumbai
14    360825     Mumbai
15    360825     Mumbai
16    360825     Mumbai
17    123456       None
18    123456       None
19    123456       None
20    123456       None
21    123456       None

相关问题