Применить функцию к парам строк в фрейме данных Pandas - PullRequest
0 голосов
/ 09 октября 2018

Я новичок в pandas dataframe, и я хотел применить функцию, берущую пару строк в одном столбце.Например, когда вы применяете функцию 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 ]

0 голосов
/ 09 октября 2018

Для diff, что составляет s-s.shift(), поэтому в вашей функции вы можете сделать

df['shifttext']=df.text.shift()
df.apply(lambda x : my_measure_function(x['text'],x['shifttext']))
0 голосов
/ 09 октября 2018

Вы можете избежать pd.DataFrame.apply, поскольку производительность может пострадать .Вместо этого вы можете использовать map с pd.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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...