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

将条件Lambda应用于系列与数据帧[重复]

颜功
2023-03-14

我试图用一个基于NA日期的模型在一系列中估算NA值。我不断得到一个当将条件lambda函数应用于转换为数据帧的序列的索引时,但当索引转换为序列时,具有多个元素的数组的真值不明确。对系列和数据帧使用apply有什么区别?

我的最小可复制的例子:

from datetime import datetime
import pandas as pd
import numpy as np

index = [datetime.strptime(i, "%Y-%M-%d") for i in ['2019-12-18', '2019-12-17', '2019-12-16', '2019-12-13','2019-12-12']]
vals =  np.array([ 1.2,  np.nan, 3.26,  np.nan,  5])
a = pd.Series(vals, index = index)
a_ix =a.index.to_frame()

a.apply(lambda i: 1 if i == i else -1) #Works
a_ix.apply(lambda i: a[i] == a[i]) #Works
a_ix.apply(lambda i: a[i] == a[i] if True else False) #Works

a_ix.apply(lambda i: True if (a[i] == a[i]) else False) #Fails
a_ix.apply(lambda i: True if (a[i].values != np.nan) else False) #Fails

#but converting index to series instead of a DataFrame works
a_ix = pd.Series(a.index, index = a.index)
a_ix.apply(lambda i: True if (a[i] == a[i]) else False)

编辑:答案是不。to_frame()返回序列作为一个单一的列(形状(5,1))。这是一次应用的馈入,而使索引为一个系列(形状(5,))结果在一个行中迭代。以下两种方法都不起作用:

a_ix = a.index.to_frame().T
a_ix.apply(lambda i: True if (a[i] == a[i]) else False, axis=1) #Should make row

a_ix = a.index.to_frame()
a_ix.apply(lambda i: True if (a[i] == a[i]) else False, axis=0) #Should make column

共有1个答案

印宏阔
2023-03-14

答案是。to_frame()以单列形式返回序列(形状(5,1))。一次将其输入apply all,同时将索引设为一个系列(shape(5,))将生成一行,该行将被迭代。这不是我期望的工作方式;它默认为axis=0,因此在列上而不是行上迭代。

 类似资料:
  • 有人能解释一下为什么这个代码不起作用吗? 它返回错误:TypeError:(“'NoneType'对象不可调用”,“发生在索引0上”)数据帧df在某些单元格中包含一些None值。我的意图是对所有非无值应用函数。

  • 我从这个URL刮取了这个表: "https://www.patriotsoftware.com/blog/accounting/average-cost-living-by-state/" 看起来像这样: 然后我编写了这个函数来帮助我将字符串转换成整数: 当我只将函数应用于一列时,它就会工作。我在这里找到了关于在多个列上使用的答案:如何将函数应用于多个列 但我下面的代码不起作用,也不会产生错误:

  • 并将其应用于数据表的一列--这是我希望这样做的: 我还没有找到任何简单的方法,正在努力找出如何做到这一点。一定有一个更简单的方法,比将数据rame转换为和RDD,然后从RDD中选择行来获得正确的字段,并将函数映射到所有的值,是吗?创建一个SQL表,然后用一个sparkSQL UDF来完成这个任务,这更简洁吗?

  • 我有一个派斯帕克数据帧 我想将其转换为与 pyspark.ml 一起使用。我可以使用字符串索引器将名称列转换为数字类别: 如何用StringIndexer(例如< code>name和< code>food,每个列都有自己的< code>StringIndexer)转换几个列,然后用VectorAssembler生成一个特征向量?还是必须为每一列创建一个< code>StringIndexer?

  • 我必须从二维坐标计算希尔伯特曲线上的距离。使用hilbertcurve包,我构建了自己的“hilbert”函数。坐标存储在数据帧(列1和列2)中。如您所见,我的函数在应用于两个值(test)时有效。 然而,它只是不工作时,应用行明智通过应用函数!这是为什么呢?我到底做错了什么?我需要一个额外的列“希尔伯特”,希尔伯特距离在列“col_1”和“col_2”中给出。 最后一个命令以错误结束: 谢谢你的

  • 怎么办? **添加详细示例如下***