переберите pandas dataframe и создайте другой dataframe с повторяющимися записями - PullRequest
1 голос
/ 24 мая 2019

У меня есть фрейм данных act со столбцами как ['ids','start-yr','end-yr'].
Я хочу создать еще один фрейм данных timeline со столбцами как ['ids','years'].
, используя act df.Поэтому, если act имеет поля как

ids             start-yr end-yr
--------------------------------
'IAs728-ahe83j'    2014    2016
'J8273nbajsu-193h' 2012    2018

, я хочу заполнить timeline df следующим образом:

ids                years
------------------------
'IAs728-ahe83j'     2014
'IAs728-ahe83j'     2015
'IAs728-ahe83j'     2016
'J8273nbajsu-193h'  2012
'J8273nbajsu-193h'  2013
'J8273nbajsu-193h'  2014
'J8273nbajsu-193h'  2015
'J8273nbajsu-193h'  2016
'J8273nbajsu-193h'  2017
'J8273nbajsu-193h'  2018

Моя попытка на данный момент:

timeline = pd.DataFrame(columns=['ids','years'])

cnt = 0
for ix, row in act.iterrows():
    for yr in range(int(row['start-yr']), int(row['end-yr'])+1, 1):
        timeline[cnt, 'ids'] = row['ids']
        timeline[cnt, 'years'] = yr
        cnt += 1

Но это очень дорогостоящая операция, отнимающая слишком много времени (что, я знаю, очевидно).Так какой же должен быть лучший питонический подход к заполнению панды в такой ситуации?
Любая помощь приветствуется, спасибо.

1 Ответ

2 голосов
/ 24 мая 2019

Использовать понимание списка с range для списка кортежей и DataFrame конструктор:

a = [(i, x) for i, a, b in df.values for x in range(a, b + 1)]
df = pd.DataFrame(a, columns=['ids','years'])
print (df)
                  ids  years
0     'IAs728-ahe83j'   2014
1     'IAs728-ahe83j'   2015
2     'IAs728-ahe83j'   2016
3  'J8273nbajsu-193h'   2012
4  'J8273nbajsu-193h'   2013
5  'J8273nbajsu-193h'   2014
6  'J8273nbajsu-193h'   2015
7  'J8273nbajsu-193h'   2016
8  'J8273nbajsu-193h'   2017
9  'J8273nbajsu-193h'   2018

Если возможно, несколько столбцов в DataFrame фильтровать их по списку:

c = ['ids','start-yr','end-yr']
a = [(i, x) for i, a, b in df[c].values for x in range(a, b + 1)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...