在Pandas数据框中的行对上应用函数

时间:2018-10-08 23:30:07

标签: python pandas

我是pandas数据框的新手,我想应用一个在同一列中包含几行的函数。就像当您应用函数diff()时一样,但是我想计算文本之间的距离。所以我定义了一个测量距离的函数,我尝试使用apply,但是我不知道如何挑选几行。在下面,我显示了一个我尝试做过的例子以及我的期望:

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 个答案:

答案 0 :(得分:1)

您可能希望避免像pd.DataFrame.apply那样使用performance may suffer。相反,您可以将mappd.Series.shift结合使用:

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]

答案 1 :(得分:1)

对于diff(即s-s.shift()),因此您可以在函数中进行

df['shifttext']=df.text.shift()
df.apply(lambda x : my_measure_function(x['text'],x['shifttext']))