输入:
mp = [1,2,3,4]
tw = [4,7,3,5]
cw = []
# create the data frame:
df = pd.DataFrame((cw),
columns = ["1","2","3","4"])
# add list tw to the first row
df.loc[len(df)] = tw
df
输出:
1 2 3 4
0 4 7 3 5
期望输出:
1 2 3 4
0 4 7 3 5
1 5 8 4 6
2 6 9 5 7
... ... ... ... ...
3000 3003 3006 3002 3004
从列表"的初始参考行开始;tw";我需要在起始值上加1,然后继续。如何循环并不断创建行,以便下一行是上一行+1,我需要对3000行执行此操作。我看到的很多解决方案都要求我创建列表并添加到pandas数据帧中,但我不能手动创建3000个列表,然后手动将它们添加到我的数据帧中。一定有办法解决这个问题,请帮忙!
我会使用numpy,这样我们就可以使用braodcasting执行简单的加法。然后在创建数组之后创建DataFrame。逐行增长DataFrame的效率非常低。
import pandas as pd
import numpy as np
N = 3000 # Number of rows
tw = [4, 7, 3, 5] # Initial column values
df = pd.DataFrame(np.array(tw) + np.arange(N)[:, None],
columns=[1,2,3,4])
# 1 2 3 4
#0 4 7 3 5
#1 5 8 4 6
#2 6 9 5 7
#... ... ... ... ...
#2997 3001 3004 3000 3002
#2998 3002 3005 3001 3003
#2999 3003 3006 3002 3004
#
#[3000 rows x 4 columns]
另一个选项是创建一行DataFrame,reindex
创建所有行,填充要添加的值(1
)和cumsum
。
df = (pd.DataFrame([tw], columns=[1,2,3,4])
.reindex(range(N))
.fillna(1, downcast='infer')
.cumsum())
将df.append
与df.tail
和df.add
:一起使用
n = 3000 # this is the value of total rows you want
In [209]: for i in range(n):
...: df = df.append(df.tail(1).add(1))
...:
示例:
In [214]: df
Out[214]:
1 2 3 4
0 4 7 3 5
In [215]: n = 5
In [216]: for i in range(5):
...: df = df.append(df.tail(1).add(1))
...:
In [217]: df
Out[217]:
1 2 3 4
0 4 7 3 5
0 5 8 4 6
0 6 9 5 7
0 7 10 6 8
0 8 11 7 9
0 9 12 8 10
这里有一个可自定义的函数,可以用来选择第一行和要添加到panda的行数:
import pandas as pd
def expandingRow(df, firstRow, nRows):
for i in range (0,nRows):
df.loc[len(df)] = [x+len(df.index) for x in firstRow]
mp = [1,2,3,4]
tw = [4,7,3,5]
cw = []
# create the data frame:
df = pd.DataFrame((cw),
columns = ["1","2","3","4"])
expandingRow(df, tw, 3000)
df
Out[1]:
1 2 3 4
0 4 7 3 5
1 5 8 4 6
2 6 9 5 7
3 7 10 6 8
4 8 11 7 9
... ... ... ...
2995 2999 3002 2998 3000
2996 3000 3003 2999 3001
2997 3001 3004 3000 3002
2998 3002 3005 3001 3003
2999 3003 3006 3002 3004
[3000 rows x 4 columns]
tw = [4,7,3,5]
cw = []
df = pd.DataFrame((cw),
columns = ["1","2","3","4"])
df.loc[len(df)] = tw
df.reset_index()
for key in range(2999):
row = df.loc[key].values #convert to array
row = row.tolist() #convert to nested list
row=[x+1 for x in row]
df.loc[key+1]=row
print (row)