如何在Python中从另一个数据框中为新数据框分配值

3

我设置了一个新的数据框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

我有另一个数据框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

现在,我需要将FwdDf中第12行到23行的'Tenor'数据分配给新的数据框SimMean。
我使用了:
    SimMean.loc[0:11,'Tenor'] = FwdDf.loc [12:23,'Tenor']

但它没有起作用:

    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

我是Python的新手,希望得到您的帮助。谢谢。

1个回答

2

调用.values以避免索引对齐问题:

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

编辑

由于您的列实际上是datetime类型,因此您需要再次转换类型:

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

谢谢!看起来我有问题,因为Tenor数据是日期时间格式。'FwdDf.loc [12:23,'Tenor'] 12 2018-01-01 13 2018-02-01 14 2018-03-01 15 2018-04-01 16 2018-05-01 17 2018-06-01 18 2018-07-01 19 2018-08-01 20 2018-09-01 21 2018-10-01 22 2018-11-01 23 2018-12-01 Name: Tenor, dtype: datetime64[ns]' - hassISC
所以当我运行你的代码后,新的数据框看起来像'imMean Tenor 5x16 7x8 2x16H 0 1514764800000000000 NaN NaN NaN 1 1517443200000000000 NaN NaN NaN 2 1519862400000000000 NaN NaN NaN 3 1522540800000000000 NaN NaN NaN 4 1525132800000000000 NaN NaN NaN 5 1527811200000000000 NaN NaN NaN 6 1530403200000000000 NaN NaN NaN 7 1533081600000000000 NaN NaN NaN 8 1535760000000000000 NaN NaN NaN 9 1538352000000000000 NaN NaN NaN 10 1541030400000000000 NaN NaN NaN 11 1543622400000000000 NaN NaN NaN' - hassISC
它将值作为不兼容的类型进行了采用,您需要再次进行转换,稍后会更新。 - EdChum
通常您会编辑您的问题,以便不会丢失格式。 - EdChum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接