python - 按组用另一个数据框的增长率填充熊猫数据框的缺失值
问题描述
我正在尝试通过使用系列“Y”向后增长(假设它是百分比增长率)来填充系列“X”的缺失值。我正在尝试按“G”组执行此操作。当我调试时,我可以看到我的函数“Fillbackwards”正在做我希望它为每个组做的事情。但是,当我使用 apply 在每个组上使用此函数时,它会返回一个空数据框。有谁知道我错过了什么?
谢谢
编辑澄清我想通过使用另一个系列向后增长系列来填充 na。
import pandas as pd
import numpy as np
df = pd.DataFrame({'X':[np.nan, np.nan, 6, 6.7, np.nan, 5, 9, 10],
'Y':[5.4, 5.7, 5.5, 6.1, 2.1, 1.5, 5.1, 2.1,],
'G': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B']})
def Fillbackwards(DB, Sname, Growthrate):
first_non_nan = DB[Sname].isnull().idxmin()
while first_non_nan-DB.index[0] > 0:
# Note the index of the group within the dataframe does not start at 0 as it's part of a larger frame - DB.index[0] restarts from zero
DB.loc[first_non_nan-1-DB.index[0], Sname] = DB.loc[first_non_nan-DB.index[0], Sname]/(DB.loc[first_non_nan-DB.index[0], Growthrate]/100+1)
first_non_nan -= 1
df = df.groupby('G').apply(lambda x: Fillbackwards(x, 'X', 'Y'))
解决方案
您是否只是想用 Y 中的值填充 X 中的 NaN 值?
import pandas as pd
import numpy as np
df = pd.DataFrame({'X':[np.nan, np.nan, 6, 6.7, np.nan, 5, 9, 10],
'Y':[5.4, 5.7, 5.5, 6.1, 2.1, 1.5, 5.1, 2.1,],
'G': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B']})
df['X'] = df['X'].fillna(df['Y'])
pandas 有一个内置的方法来处理这个
推荐阅读
- r - 如何在 R 中编写函数来自动选择重要特征?
- c# - 在字典的列表中添加变量(字典
) 统一 C# - c# - Xamarin.Android - ToolbarNavigationClickListener
- python - Django 中的 datetime.date.today()(Dash 应用程序)
- java - Java MapStruct:映射器在映射单个元素之前清除目标集合
- wordpress - Ninja 使用 get_user_meta 将值渲染到隐藏字段
- spring-boot - Spring启动Kafka轮询直到队列为空并休眠
- python - python从子进程中获取grep -q的输出
- c++ - 通过包装器传递指向 MPI_Win_allocate_shared 的指针
- python - 适用于允许您指定应调试哪些方法的类的 Python 装饰器。我该如何实施?