我正在尝试将嵌套字典分配给特定位置,但是它不起作用。这是我写的:
def history_current(df):
df_this = df.copy()
leid_val = {}
leid_index = {}
run_seq_min = min(df.run_seq.values)
for idx, row in df.iterrows():
if row.run_seq == run_seq_min:
print({row.cp_id : { row.products : {row.currency : {row.tran_amnt}}}})
df_this.loc[idx, 'current'] = {row.cp_id : { row.products : {row.currency : {row.tran_amnt}}}}
print(df_this)
但是它在第一次迭代中给出了以下输出:
{201: {'U': {'USD': {100}}}}
le_id run_seq cp_id cp_name products tran_amnt currency current \
0 101 1 201 A U 100 USD 201.0
1 102 1 202 B U 200 USD NaN
2 103 1 202 B V 672 INR NaN
3 104 2 201 A W 892 YEN NaN
4 105 2 208 H V 739 SGD NaN
5 101 3 203 C X 982 INR NaN
6 103 3 204 D Z 739 USD NaN
7 101 3 205 E Z 537 YEN NaN
8 101 3 206 F Y 263 ISD NaN
9 102 3 206 F Y 638 INR NaN
10 104 3 205 E X 437 SGD NaN
11 102 3 203 C V 783 INR NaN
12 103 4 204 D U 738 UEB NaN
13 103 4 204 D Z 893 INR NaN
14 103 4 207 G M 637 YEN NaN
15 101 4 202 B W 783 SGD NaN
16 104 5 201 A Y 927 USD NaN
17 104 5 203 C Z 637 YEN NaN
18 103 5 207 G U 748 USD NaN
19 102 5 208 H W 126 INR NaN
history
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
10 NaN
11 NaN
12 NaN
13 NaN
14 NaN
15 NaN
16 NaN
17 NaN
18 NaN
19 NaN
但是,我期望的是{201: {'U': {'USD': {100}}}}
在当前位置的第一行,并使用行值对整个数据帧有效地发挥作用。
请注意,当前和历史记录是使用'np.nan`创建的,稍后将使用嵌套字典进行填充。
答案 0 :(得分:1)
尝试将dict表达式包装在方括号中:
df_this.loc[idx, 'current'] = [{row.cp_id : { row.products : {row.currency : row.tran_amnt}}}]
它可以提供帮助。
找到了here。
答案 1 :(得分:0)
尝试改用iloc
。 loc
适用于条件,而iloc
适用于职位。由于您要提供职位(idx
,因此使用iloc
应该可以