我在每行中保存了一个具有不同键的字典,在新的Dataframe列中所有值都等于0。
从头开始,并根据另一列(同一行)的值,我想增加此字典并存储该字典的视图。
可以很好地进行增量,但是无法存储视图。最后,我在整列中都有相同的字典。
Before
col1 col_dict
1 {1:0, 2:0, 3:0}
2 {1:0, 2:0, 3:0}
3 {1:0, 2:0, 3:0}
What i want:
col1 col_dict
1 {1:1, 2:1, 3:1}
2 {1:0, 2:1, 3:1}
3 {1:0, 2:0, 3:1}
What I have:
col1 col_dict
1 {1:1, 2:1, 3:1}
2 {1:1, 2:1, 3:1}
3 {1:1, 2:1, 3:1}
例如:
def function():
for x in reversed(range(20)):
#taking the value in the other column, and incrementing the value in the dictionary
dataset["dict_column"][x][str(dataset.value[x])][0] += 1
我试图传递给列表格式,同样的问题。 我认为这是由于大熊猫的过程造成的。
谢谢。
接受任何解决方案以完成工作
答案 0 :(得分:1)
增加字典后,您可以使用字典的副本分配给col_dict
。重新索引数据框以确保反向递增。
import pandas as pd
import copy
df = pd.DataFrame()
df["col1"] = [1, 2, 3]
col_dict = {i:0 for i in df["col1"]}
def get_dict(col):
col_dict[col] = 1
return copy.copy(col_dict)
df = df.iloc[::-1]
df["col_dict"] = df["col1"].apply(get_dict)
df = df.iloc[::-1]
print(df)
答案 1 :(得分:0)
由于约翰·多伊(John Doe),我找到了解决问题的方法,可能不是最好的选择,但是由于我不需要表演。
这是我的代码,效率不如我想像的高,但是对于像我这样的初学者来说,可能更容易理解(没有冒犯性)。
import pandas as pd
import copy
def function():
#to skip the copy for the first (last) row
flag = 0
for x in reversed(range(20)):
if flag == 0:
dataset["dict_column"][x][str(dataset.value[x])][0] += 1
flag = 1
else:
dataset["dict_column"][x] = copy.deepcopy(dataset["dict_column"][x+1])
dataset["dict_column"][x][str(dataset.value[x])][0] += 1