我一直在尝试解决一个问题,那就是从"before"和"after"列的操作中获取"desired_final"列。
df = pd.DataFrame({
'before': pd.Series([True, True, True, False, False, False, pd.NA, pd.NA, pd.NA], dtype='boolean'),
'after': pd.Series([False, True, pd.NA, True, False, pd.NA, False, True, pd.NA], dtype='boolean'),
'desired_final': pd.Series([True, True, True, True, False, False, pd.NA, pd.NA, pd.NA], dtype='boolean')
})
基本上,我们倾向于True,除非before + after为False,或者其中之一为NA。
终于想到了这个,我认为,hacky解决方案,但我犹豫把它投入生产。
def hack_solution(before_series, after_series):
output_series = before_series.replace(True, pd.NA) + after_series
return output_series.fillna(before_series)
我也曾在朋友的建议下尝试过:
def possible_solution(before_series, after_series):
res = []
for x,y in zip(before_series, after_series):
if pd.isnull(x):
res.append(pd.NA)
elif x==True | y==True:
res.append(True)
else:
res.append(x)
return res
# Result:
# [True, True, True, False, False, False, <NA>, <NA>, <NA>] dtype: object
所以有两个问题:
1.为什么possible_solution返回一个对象而hack_solution返回一个布尔值?
1.为什么在索引3中,possible_solution返回False而不是True?
2条答案
按热度按时间3yhwsihp1#
对于
possible_solution
,您需要将它们放在一个括号中:您可以直接使用
pandas.Series.fillna
:输出:
jutyujz02#
您可以尝试:
希望你能解释清楚。