无法将值分配给数据框中的特定位置

时间:2020-01-03 22:13:18

标签: python pandas numpy dataframe

我正在尝试将嵌套字典分配给特定位置,但是它不起作用。这是我写的:

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`创建的,稍后将使用嵌套字典进行填充。

2 个答案:

答案 0 :(得分:1)

尝试将dict表达式包装在方括号中:

df_this.loc[idx, 'current'] = [{row.cp_id : { row.products : {row.currency : row.tran_amnt}}}]

它可以提供帮助。

找到了here

答案 1 :(得分:0)

尝试改用ilocloc适用于条件,而iloc适用于职位。由于您要提供职位(idx,因此使用iloc应该可以