Python 如何通过重复最后一行来扩展数据帧?

Python 如何通过重复最后一行来扩展数据帧?,python,pandas,Python,Pandas,我有一个数据帧,希望通过重复最后一行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是

我有一个数据帧,希望通过重复最后一行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循环有更好的方法吗?

您可以使用嵌套的
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
下面是另一种(奇特的索引)方法:

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