如何通过重复最后一行来扩展pandas DataFrame?

时间:2014-09-25 07:54:41

标签: python pandas

我有一个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循环,有没有更好的方法呢?

2 个答案:

答案 0 :(得分:6)

这是另一种(花式索引)方式:

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 :(得分:2)

您可以使用嵌套的concat操作,内部操作将连接您的最后一行3次,然后我们将其与您的orig 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