遍历熊猫数据框并创建具有重复记录的另一个数据框

时间:2019-05-24 13:39:51

标签: python pandas dataframe

我有一个数据框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

但这是一个非常昂贵的操作,非常耗时(我知道这是显而易见的)。那么,在这种情况下填充pandas df的最佳pythonic方法应该是什么?
谢谢您的帮助。

1 个答案:

答案 0 :(得分:2)

将列表理解与putchar一起用于元组列表和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