在Python中For循环的每次迭代之后创建一个新列

时间:2019-08-21 19:03:34

标签: python pandas

在Python中for循环的每次迭代之后,我想创建一列并将其分配给数据框。

df_xyz = pd.DataFrame()
for j in range(0,3):
    for k in range(j+1,4):
        print(j,k)

因此,在这种情况下,它应在数据框中创建6个新列,名称为“ ABC1”,“ ABC2” ...“ ABC6”。并且这些列将从numpy数组中获取值,该数组是通过运行循环中存在的代码生成的。我的实际代码涉及某种算法,但在这里我只是放置需要帮助的相关代码。

编辑1:

更新了代码:

z= np.array([1,2,4])
df_xyz = pd.DataFrame()
for j in range(0,3):
    for k in range(j+1,4):
        print(j,k)
        df_xyz = pd.DataFrame(z)  

这只会创建一次新列。

1 个答案:

答案 0 :(得分:1)

它看起来确实很糟糕,但是我认为您正在尝试这样做:

In [1]:
import pandas as pd 
import numpy as np

z= np.array([1,2,4])
df_xyz = pd.DataFrame()
iterator = 1
for j in range(0,3):
    for k in range(j+1,4):
        print(j,k)
        col_name = 'ABC' + str(iterator)
        df_xyz.loc[:, col_name] = z  
        iterator += 1 
df

Out [1]:
    ABC1    ABC2    ABC3    ABC4    ABC5    ABC6
0   1       1       1       1       1       1
1   2       2       2       2       2       2
2   4       4       4       4       4       4

您也可以执行以下操作:

In [2]:
import pandas as pd 
import numpy as np

my_cols = ['ABC1', 'ABC2', 'ABC3', 'ABC4', 'ABC5', 'ABC6']

z= np.array([1,2,4])
df_xyz = pd.DataFrame()
for j in range(0,3):
    for k in range(j+1,4):
        print(j,k)
        col_name = my_cols[0]
        my_cols.pop(0)
        df_xyz.loc[:, col_name] = z  
df

Out [2]:
    ABC1    ABC2    ABC3    ABC4    ABC5    ABC6
0   1       1       1       1       1       1
1   2       2       2       2       2       2
2   4       4       4       4       4       4