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