我有一个 Dataframe 如下:
import pandas as pd
df = pd.DataFrame({'Country':['USA','USA','MEX','IND','UK','UK','UK'],
'Region':['Americas','NaN','NaN','Asia','Europe','NaN','NaN'],
'Flower':['Rose','Rose','Lily','Orchid','Dandelion','Dandelion','Dandelion'],
'Animal':['Bison','NaN','Golden Eagle','Tiger','Lion','Lion','NaN'],
'Game':['Baseball','Baseball','soccer','hockey','cricket','cricket','cricket']})
我想按Country
和Flower
分组,并向前或向后填充Region
和Animal
列中缺失的值,但Game
列应保持不变
我试过这个,但它没有工作:
df['Region'] = df.groupby(['Country','Flower'])['Region'].transform(lambda x: x.ffill())
还有:
df.groupby(['Country','Flower'])['Animal', 'Region'].isna().bfill()
我想知道这件事该怎么办。
虽然这可以工作,但它删除了游戏列:
x1米5英寸x1米6英寸
如果我做了一个转换,就会有一个长度不匹配的地方,另外请注意,这是一个示例 Dataframe ,我在原始帧中添加了"NaN"作为字符串,它是np.nan。
3条答案
按热度按时间6ojccjat1#
如果您更改 Dataframe 代码以实际包含
np.nan
s,则您提供的代码实际上可以工作。尽管nans显示为正常文本“Nan”,但您无法创建手动写入该文本的 Dataframe ,因为这将被解释为字符串,而不是实际的缺失值。然后,这个:
实际上得出了这个结果
tcomlyy62#
首先,您需要知道
'NaN'
不是NaN
其次,如果需要在
pandas
中链接两个iid函数,则需要apply
deyfvvtc3#
由于Mex和Lily只是行,而且它们的区域值为nan,因此fillna函数无法找到适当的组值。如果在fillna组模式下捕获异常,则没有组的值将保持原样。然后应用ffill和bfill覆盖没有适当组
的值