вычисление диапазона на основе полей pandas кадра данных - PullRequest
1 голос
/ 22 марта 2020

У меня есть pandas фрейм данных

import pandas as pd
import numpy as np 

d = pd.DataFrame({
       'col': ['A', 'B', 'C', 'D'],
       'start': [1, 4, 6, 8], 
       'end': [4, 9, 10, 12]
    })

Я пытаюсь вычислить поле диапазона на основе начального и конечного полей, чтобы его значения были

[1, 2, 3, 4]
[4, 5, 6, 7, 8, 9]
[6, 7, 8, 9, 10]
[8, 9, 10, 11, 12]

Я пробовал следующие варианты

d['range_'] = np.arange( d.start, d.end, 1)


d['range_'] = range(d['start'], d['end']) 

, но получаю следующие ошибки

ValueError: Истинное значение Серии неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

TypeError: объект 'Series' не может быть интерпретирован как целое число <- секунда попытка </p>

Любая помощь будет оценена

Спасибо

Ответы [ 2 ]

2 голосов
/ 22 марта 2020

Попробуйте:

d.apply(lambda x: np.arange(x['start'], x['end']+1), axis=1)

Вывод:

0          [1, 2, 3, 4]
1    [4, 5, 6, 7, 8, 9]
2      [6, 7, 8, 9, 10]
3    [8, 9, 10, 11, 12]
dtype: object

Примечание: np.arange и range не предназначены для принятия pd.Series, поэтому вы можете использовать команду rowwise для создания диапазонов.

1 голос
/ 22 марта 2020

IIU C

l = [list(range(x,y+1)) for x , y in zip(d.start,d.end)]
[[1, 2, 3, 4], [4, 5, 6, 7, 8, 9], [6, 7, 8, 9, 10], [8, 9, 10, 11, 12]]
d['range_']=l
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...