Python 数据帧中特定位置的值分配无效
我试图将嵌套的dict分配到特定位置,但它不起作用。以下是我写的:Python 数据帧中特定位置的值分配无效,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我试图将嵌套的dict分配到特定位置,但它不起作用。以下是我写的: 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: pr
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
然而,我所期望的是在current下的第一行中{201:{'U':{'USD':{100}}}}
,并且使用行值一致地用于整个数据帧
请注意,当前和历史是使用“np.nan”创建的,稍后将使用嵌套字典填充。尝试改用
iloc
loc
应该与条件一起工作,而iloc
与位置一起工作。由于您正在输入一个位置(idx
),因此使用iloc
应该可以尝试将dict表达式括在方括号中:
df_this.loc[idx, 'current'] = [{row.cp_id : { row.products : {row.currency : row.tran_amnt}}}]
这会有帮助
找到了。我不确定我是否完全理解这个问题,但我看到第一排的tran\u amnt是101 int,或者您是否打算获取le\u id?请提供准确的预期输出?此外,您还可以简化示例数据,例如,仅前五行,可能会删除不需要的列。@Alexander我想将代码中的嵌套字典分配给输出,其中
201.0
在current
列下打印,因此数据帧中的每一行都使用行值。当我使用.iloc时,它会给出以下错误:ValueError:没有为对象类型命名为1的轴
我尝试了这个-df_this.loc[idx]['current']={row.cp_id:{row.products:{row.currency:{row.tran_amnt}}}
但它也不起作用。这是一个错误,我在使用“df u this”时打印了“df”。但是你建议的改变给出了几乎相同的结果。再次阅读问题,我已对其进行了编辑。更新答案)