我想在数组中传递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)
编辑:我想要的是我数组中的每个值,我得到了第一个整列被该数组值替换的数据集。我也提供了示例。
答案 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