Python 数据帧中特定位置的值分配无效

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

我试图将嵌套的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:
            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”。但是你建议的改变给出了几乎相同的结果。再次阅读问题,我已对其进行了编辑。更新答案)