简体   繁体   中英

how to assign values to a new data frame from another data frame in python

I set up a new data frame SimMean:

    columns = ['Tenor','5x16', '7x8', '2x16H']
    index = range(0,12)
    SimMean = pd.DataFrame(index=index, columns=columns)

    SimMean
       Tenor 5x16  7x8 2x16H
    0    NaN  NaN  NaN   NaN
    1    NaN  NaN  NaN   NaN
    2    NaN  NaN  NaN   NaN
    3    NaN  NaN  NaN   NaN
    4    NaN  NaN  NaN   NaN
    5    NaN  NaN  NaN   NaN
    6    NaN  NaN  NaN   NaN
    7    NaN  NaN  NaN   NaN
    8    NaN  NaN  NaN   NaN
    9    NaN  NaN  NaN   NaN
    10   NaN  NaN  NaN   NaN
    11   NaN  NaN  NaN   NaN

I have another data frame FwdDf:

    FwdDf
            Tenor   5x16    7x8  2x16H
    0  2017-01-01  50.94  34.36  43.64
    1  2017-02-01  50.90  32.60  42.68
    2  2017-03-01  42.66  26.26  37.26
    3  2017-04-01  37.08  22.65  32.46
    4  2017-05-01  42.21  20.94  33.28
    5  2017-06-01  39.30  22.05  32.29
    6  2017-07-01  50.90  21.80  38.51
    7  2017-08-01  42.77  23.64  35.07
    8  2017-09-01  37.45  19.61  32.68
    9  2017-10-01  37.55  21.75  32.10
    10 2017-11-01  35.61  22.73  32.90
    11 2017-12-01  40.16  29.79  37.49
    12 2018-01-01  53.45  36.09  47.61
    13 2018-02-01  52.89  35.74  45.00
    14 2018-03-01  44.67  27.79  38.62
    15 2018-04-01  38.48  24.21  34.43
    16 2018-05-01  43.87  22.17  34.69
    17 2018-06-01  40.24  22.85  34.31
    18 2018-07-01  49.98  23.58  39.96
    19 2018-08-01  45.57  24.76  37.23
    20 2018-09-01  38.90  21.74  34.22
    21 2018-10-01  39.75  23.36  35.20
    22 2018-11-01  38.04  24.20  34.62
    23 2018-12-01  42.68  31.03  40.00

now I need to assign the 'Tenor' data from row 12 to row 23 in FwdDf to the new data frame SimMean.

I used

    SimMean.loc[0:11,'Tenor'] = FwdDf.loc [12:23,'Tenor']

but it didn't work:

    SimMean
       Tenor 5x16  7x8 2x16H
    0   None  NaN  NaN   NaN
    1   None  NaN  NaN   NaN
    2   None  NaN  NaN   NaN
    3   None  NaN  NaN   NaN
    4   None  NaN  NaN   NaN
    5   None  NaN  NaN   NaN
    6   None  NaN  NaN   NaN
    7   None  NaN  NaN   NaN
    8   None  NaN  NaN   NaN
    9   None  NaN  NaN   NaN
    10  None  NaN  NaN   NaN
    11  None  NaN  NaN   NaN

I'm new to python. I would appreciate your help. Thanks

call .values so there are no index alignment issues:

In [35]:
SimMean.loc[0:11,'Tenor'] = FwdDf.loc[12:23,'Tenor'].values
SimMean

Out[35]:
         Tenor 5x16  7x8 2x16H
0   2018-01-01  NaN  NaN   NaN
1   2018-02-01  NaN  NaN   NaN
2   2018-03-01  NaN  NaN   NaN
3   2018-04-01  NaN  NaN   NaN
4   2018-05-01  NaN  NaN   NaN
5   2018-06-01  NaN  NaN   NaN
6   2018-07-01  NaN  NaN   NaN
7   2018-08-01  NaN  NaN   NaN
8   2018-09-01  NaN  NaN   NaN
9   2018-10-01  NaN  NaN   NaN
10  2018-11-01  NaN  NaN   NaN
11  2018-12-01  NaN  NaN   NaN

EDIT

As your column is actually datetime then you need to convert the type again:

In [46]:
SimMean['Tenor'] = pd.to_datetime(SimMean['Tenor'])
SimMean

Out[46]:
        Tenor 5x16  7x8 2x16H
0  2018-01-01  NaN  NaN   NaN
1  2018-02-01  NaN  NaN   NaN
2  2018-03-01  NaN  NaN   NaN
3  2018-04-01  NaN  NaN   NaN
4  2018-05-01  NaN  NaN   NaN
5  2018-06-01  NaN  NaN   NaN
6  2018-07-01  NaN  NaN   NaN
7  2018-08-01  NaN  NaN   NaN
8  2018-09-01  NaN  NaN   NaN
9  2018-10-01  NaN  NaN   NaN
10 2018-11-01  NaN  NaN   NaN
11 2018-12-01  NaN  NaN   NaN

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM