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

对数据帧中的行对应用函数

葛昱
2023-03-14

我是熊猫数据框的新手,我想应用一个函数,在同一列中取几行。就像当你应用函数diff(),但我想计算文本之间的距离。所以我定义了一个测量距离的函数,我试图使用应用,但我不知道如何选择几行。下面我展示了一个我尝试过的例子和我所期望的:

def my_measure_function(x,y):
   return some_distance_calculus(x,y)

>>> from pandas import DataFrame
>>> df = DataFrame({"text": ['hello','hella','hel'], "B": [3,4,4]})
>>> df['dist'] = df.apply(lambda x, y: my_measure_function(x, y), axis=0)

但它不起作用。我想得到的是:

>>> df
      text  B  dist
0    hello  3    0
1    hella  4    1
2    hel    4    2

提前感谢您为我提供的任何帮助。

共有2个答案

窦国源
2023-03-14

对于diff,即s-s.shift(),因此在函数中可以执行以下操作

df['shifttext']=df.text.shift()
df.apply(lambda x : my_measure_function(x['text'],x['shifttext']))
元胡媚
2023-03-14

您可能希望避免出现pd。数据帧。应用,因为性能可能会受到影响。相反,您可以将mappd一起使用。系列班次

df['dist'] = list(map(my_measure_function, df['text'], df['text'].shift()))

或通过列表理解:

zipper = zip(df['text'], df['text'].shift())
df['dist'] = [my_measure_function(val1, val2) for val1, val2 in zipper]
 类似资料:
  • 读取列中包含时间值的csv文件,并尽可能高效地获取包含1列值和日期时间索引的数据帧。我做了一个read_csv,然后是一个stack和下面的函数,但是这会消耗更多的时间和内存。 有人有更好的方法吗? 并获得:

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

  • 我想在DataFrame的所有行上应用一个函数。例子: 想要的输出: Scala怎么能做到呢?我跟着这个,但没有运气。

  • 本文向大家介绍如何使用grepl函数对R数据帧的行进行子集化?,包括了如何使用grepl函数对R数据帧的行进行子集化?的使用技巧和注意事项,需要的朋友参考一下 R中的grepl函数在R数据帧的字符向量或列的每个元素内搜索与参数模式的匹配项。如果我们想使用grepl对R数据帧的行进行子集化,则可以通过访问包含字符值的列来使用带有单方括号和grepl的子集。 例1 请看以下数据帧: 输出结果 通过在x

  • 我想替换一行数据的每个值。帧,对于大小相等的逻辑矩阵,其值为TRUE,由向量的对应行的值确定。以下是一个例子: 所以结果应该是这样的: 有没有不使用循环的方法来实现这一点?谢谢

  • 有人能解释为什么“路易斯维尔”会返回一个键错误吗?据我所知,这是在数据框架内。我错过了什么? 下面是数据的样子。这是一个CSV。 这就是关闭数据的内容。head()看起来像 off_data.index代码 Rajith Thennakoon的建议 输入 KeyError Traceback(最近的调用最后)~\Anaconda3\lib\site-包\熊猫\核心\索引\base.py在get_l