2014-09-25 55 views
1

我有一個DataFrame,並希望通過重複最後一行n次來擴展它。如何通過重複最後一行來擴展熊貓數據框?

示例代碼:

import pandas as pd 
import numpy as np 
dates = date_range('1/1/2014', periods=4) 
df = pd.DataFrame(np.eye(4, 4), index=dates, columns=['A', 'B', 'C', 'D']) 
n = 3 
for i in range(n): 
    df = df.append(df[-1:]) 

所以df是

  A B C D 
2013-01-01 1 0 0 0 
2013-01-02 0 1 0 0 
2013-01-03 0 0 1 0 
2013-01-04 0 0 0 1 
2013-01-04 0 0 0 1 
2013-01-04 0 0 0 1 
2013-01-04 0 0 0 1 

是否有更好的方法來做到這一點沒有for循環?

回答

3

這裏有一個備用(花式索引)的方式來做到這一點:

df.append(df.iloc[[-1]*3]) 

Out[757]: 
      A B C D 
2014-01-01 1 0 0 0 
2014-01-02 0 1 0 0 
2014-01-03 0 0 1 0 
2014-01-04 0 0 0 1 
2014-01-04 0 0 0 1 
2014-01-04 0 0 0 1 
2014-01-04 0 0 0 1 
1

你可以使用嵌套concat操作,內部人會串連你的最後一排3次,然後我們與您原稿DF串連這樣的:

In [181]: 

dates = pd.date_range('1/1/2014', periods=4) 
df = pd.DataFrame(np.eye(4, 4), index=dates, columns=['A', 'B', 'C', 'D']) 
pd.concat([df,pd.concat([df[-1:]]*3)]) 
Out[181]: 
      A B C D 
2014-01-01 1 0 0 0 
2014-01-02 0 1 0 0 
2014-01-03 0 0 1 0 
2014-01-04 0 0 0 1 
2014-01-04 0 0 0 1 
2014-01-04 0 0 0 1 
2014-01-04 0 0 0 1 

這可以被放入一個函數,像這樣:

In [182]: 

def repeatRows(d, n=3): 
    return pd.concat([d]*n) 

pd.concat([df,repeatRows(df[-1:], 3)]) 
Out[182]: 
      A B C D 
2014-01-01 1 0 0 0 
2014-01-02 0 1 0 0 
2014-01-03 0 0 1 0 
2014-01-04 0 0 0 1 
2014-01-04 0 0 0 1 
2014-01-04 0 0 0 1 
2014-01-04 0 0 0 1 
相關問題