将列的值复制到python中的数组中

时间:2018-07-15 15:30:47

标签: python pandas

我想在数组中传递column的值,然后在循环中使用它,但是问题是循环将原始列的所有值替换为array的第一个值。

例如,这是原始数据集

Score   Col1    Col2    Col3
1         2       6      1
2         5       0      1
3         1       13     1
4         1        0     0

我想要的结果是

Score   Col1    Col2    Col3
1         2       6      1
1         5       0      1
1         1       13     1
1         1        0     0

Score   Col1    Col2    Col3
2         2       6      1
2         5       0      1
2         1       13     1
2         1        0     0

Score   Col1    Col2    Col3
3         2       6      1
3         5       0      1
3         1       13     1
3         1        0     0

Score   Col1    Col2    Col3
4         2       6      1
4         5       0      1
4         1       13     1
4         1        0     0

但是使用我的代码,我得到的结果就像

Score   Col1    Col2    Col3
1         2       6      1
1         5       0      1
1         1       13     1
1         1        0     0

Score   Col1    Col2    Col3
1         2       6      1
1         5       0      1
1         1       13     1
1         1        0     0

Score   Col1    Col2    Col3
1         2       6      1
1         5       0      1
1         1       13     1
1         1        0     0

Score   Col1    Col2    Col3
1         2       6      1
1         5       0      1
1         1       13     1
1         1        0     0

这是我正在使用的代码,非常简单

df_arr = df1['Score'].values
for i in df_arr:
    df1['Score'] = i
    print(df1)

但是,如果我添加“ Score”的重复列(例如“ Score1”)并在制作数组和循环中使用它,则会得到正确的结果。

df_arr = df1['Score1'].values
    for i in df_arr:
        df1['Score'] = i
        print(df1)

编辑:我想要的是我数组中的每个值,我得到了第一个整列被该数组值替换的数据集。我也提供了示例。

2 个答案:

答案 0 :(得分:1)

您可以使用字典理解来创建包含所有数据帧的字典。优点是您可以将所有数据框很好地组织在字典中。

df_dict = {'Score_'+str(i): df[['Col1', 'Col2', 'Col3']].assign(Score=i) for i in df.Score.unique()}

然后,您可以像访问任何词典一样访问每个数据框。例如,要获取Score为2的数据帧,可以使用:

df_dict['Score_2']

   Col1  Col2  Col3  Score
0     2     6     1      2
1     5     0     1      2
2     1    13     1      2
3     1     0     0      2

您还可以通过查看字典的键来查看已创建的所有数据框:

>>> df_dict.keys()
dict_keys(['Score_1', 'Score_2', 'Score_3', 'Score_4'])

答案 1 :(得分:-1)

所以,我很确定这就是您想要的。它会创建数据框的深层副本,因此最终不会将更改复制到原始数据框对象。

df = df[["Score", "Col1", "Col2", "Col3"]]

df_list = []
for score in df["Score"]:
    new_df = df.copy()
    new_df["Score"] = score
    df_list.append(new_df)

for temp_df in df_list:
    print(temp_df.to_string(index=False), "\n")

输出(注意:我根据OP的请求更改了顺序):

Score Col1 Col2 Col3
   1    2    6    1
   1    5    0    1
   1    1   13    1
   1    1    0    0 

Score Col1 Col2 Col3
   2    2    6    1
   2    5    0    1
   2    1   13    1
   2    1    0    0 

Score Col1 Col2 Col3
   3    2    6    1
   3    5    0    1
   3    1   13    1
   3    1    0    0 

Score Col1 Col2 Col3
   4    2    6    1
   4    5    0    1
   4    1   13    1
   4    1    0    0 
相关问题