当前位置: 首页 > 知识库问答 >
问题:

Python - 根据标识符列按前几行的值填充 NA

乌鸿宝
2023-03-14

我想在两栏中填入缺少的值。根据预定义的类别1的最后日期(在先前填充的行中预定义),存在日期,类别2应填充另一行的值,例如:

数据示例

Day  Date      Cat1      Cat2
1    31/12/17  cat       mouse
2    01/09/18  cat       mouse
3    27/05/18  dog       elephant
4       NaN    cat       NaN
5       NaN    cat       NaN

因此,应根据< code>Cat1列- 01/09/18中< code>cat值的最后存在日期,填写< code>Date列的< code>NaN。< code>Cat2列中的< code>NaN应由< code>mouse填写,作为已经为< code > Date -< code > 01/09/18 选择的行中的定义值。

我了解到循环遍历每一行是非常糟糕的做法,最好用一种方式做所有的事情。

我将不胜感激任何想法。谢谢)

我尝试通过 fillna 方法执行此操作,但它按 Cat1 的最后一个值填充而没有条件。

data.fillna(method='ffill', inplace = True)

实际结果为:

Day  Date      Cat1      Cat2
1    31/12/17  cat       mouse
2    01/09/18  cat       mouse
3    27/05/18  dog       elephant
4    27/05/18  cat       elephant
5    27/05/18  cat       elephant

预期成果应为:

Day  Date      Cat1      Cat2
1    31/12/17  cat       mouse
2    01/09/18  cat       mouse
3    27/05/18  dog       elephant
4    01/09/18  cat       mouse
5    01/09/18  cat       mouse

共有3个答案

吕奇
2023-03-14

你可以用一句格言:

dict = df[['cat','cat2']].drop_duplicates(keep='first', inplace=False).to_dict()
df['cat2'] = df['cat1'].replace(dict)

对于时间序列列,您可以使用时间增量(线性外推)。祝你好运!

姜泳
2023-03-14

另外,另一种方法是:

data = data.groupby(['Cat1'], as_index = False).apply(lambda group: group.ffill())

感谢@Jezrael的解决方案的想法:)

孟修竹
2023-03-14

我相信您需要 GroupBy.ffillDataFrame.reindex,以获得与原始数据帧相同的顺序:

df = df.groupby('Cat1').ffill().reindex(df.columns, axis=1)
print (df)
   Day      Date Cat1      Cat2
0    1  31/12/17  cat     mouse
1    2  01/09/18  cat     mouse
2    3  27/05/18  dog  elephant
3    4  01/09/18  cat     mouse
4    5  01/09/18  cat     mouse
 类似资料:
  • 问题内容: 希望有人可以帮助我编写SQL脚本或函数。 我有一个数据源,我希望该功能通过并基于2个指定的列填充相关列。 因此,名称和值列。 例如 因此,脚本/函数应该为数据源的每一行分别在a,b,c,d列中填充值2,1、3、5。 这可能吗?如果是这样,有人可以教我如何做。 问题答案: Oracle安装程序 : 更新声明 : 输出 : Oracle安装程序 : 插入语句 : 输出 :

  • 我正在寻找一个整洁的解决以下问题。 我有以下示例数据集: 我需要根据列2和列1中的前一个值填写NAs。如果我从第一个NA(第1列,第2行)开始,并且第2列大于1,那么我将把第1列的值(第1行)乘以第2列的值。那么如果col2小于等于1,那么col1正好等于前面的值。 这应该是最终结果: 我尝试了但没有得到想要的结果: 显然,我没有捕获我想要使用前一行的值的部分。任何帮助都将不胜感激。

  • 例如,让我们假设,在表1中,我有以下列 在表2中,我有相同的两列,但有5000行。让我们考虑5行, 现在,在我的工作表2中,我有5000行,A列填充了,但我希望根据工作表1中的值自动填充B列。我尝试过使用间接函数,但没有成功。我使用的公式是,其中test是我的工作表名。谁能告诉我这个问题出在哪里,或者有没有其他方法来解决这个问题?谢谢你。

  • 我有一个带有几列的。其中一列包含使用货币的符号,例如欧元或美元符号。另一列包含预算值。例如,在一行中,它可能意味着5000欧元的预算,而在下一行中,它可能意味着2000美元的预算。 在熊猫我想添加一个额外的列到我的DataFrame,正常化的欧元预算。所以基本上,对于每一行,如果货币列中的符号是欧元符号,新列中的值应该是预算列中的值*1,新列中的值应该是预算列的值*0.78125如果货币栏中的符号

  • 问题内容: 我有这样的MySQL表 区域表 … 和学校表 我的注册表中有多个选择(下拉)菜单。区域下拉列表如下所示 我想做的是,获取“区域” ID,然后基于“学校”表中的ID(先前选择的ID)填充学校下拉菜单。我是JS的新手。请帮助我修复它。提前谢谢。 问题答案:

  • 问题内容: 我必须将下表命名为results: 我想创建以下内容 我相信最好的前进方式是使用数据透视表,有人可以给我一些建议吗? 问题答案: 您可以使用条件聚合: