将 groupby transform
与 first
一起使用。 first
将获取每个组的第一个有效值(如果存在):
df["preference"] = df.groupby("userID")["preference"].transform('first')
df
:
userID preference
0 user1 coffee
1 user1 coffee
2 user1 coffee
3 user2 tea
4 user2 tea
5 user2 tea
6 user3 None
7 user3 None
8 user3 None
DataFrame 和导入:
import pandas as pd
from numpy import nan
df = pd.DataFrame({
'userID': {0: 'user1',1: 'user1',2: 'user1',3: 'user2',4: 'user2',5: 'user2',6: 'user3',7: 'user3',8: 'user3'},'preference': {0: nan,1: nan,2: 'coffee',3: nan,4: 'tea',5: nan,6: nan,7: nan,8: nan}
})
,
您可以使用 .groupby
+ Series.first_valid_index()
:
df["preference"] = df.groupby("userID")["preference"].transform(
lambda x: x.fillna(x[x.first_valid_index()])
)
print(df)
打印:
userID preference
0 user1 coffee
1 user1 coffee
2 user1 coffee
3 user2 tea
4 user2 tea
5 user2 tea
,
您可以将 .fillna
用于 first forward 和 back back。如果您的数据有空字符串而不是 NaN
,则您必须首先使用 dataf = dataf.replace(r'^\s*$',np.nan,regex=True)
import pandas as pd
dataf["preference"] = dataf.groupby(by="userID")["preference"].fillna(method="ffill").fillna(method="bfill")
,
使用方法fillna...
DataFrameName.fillna(method="ffill")
本文链接:https://www.f2er.com/1009.html