如何在python中从另一个数据帧为新数据帧赋值

时间:2016-03-29 14:43:21

标签: python pandas dataframe

我设置了一个新的数据框SimMean:

    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:

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

现在我需要将FwdDf中第12行到第23行的'Tenor'数据分配给新数据框SimMean。

我用过

    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

但它不起作用:

double mealCoast = double.Parse(Console.ReadLine()); // mealCoast = 12.
int tipPercent = int.Parse(Console.ReadLine()); // tipPercent = 20
int taxPercent = int.Parse(Console.ReadLine()); // taxPercent = 8

//Calculating % 
// Convert.ToInt16(mealCoast) will give you 12
// you are using integer division here, no digits preserved after period.
tipPercent = Convert.ToInt16(mealCoast) * (tipPercent) / 100; // 12 * 20 / 100 = 2
taxPercent = Convert.ToInt16(mealCoast) * (taxPercent) / 100; // 12 * 8 / 100 = 0

// 12 + 2 + 0 = 14
int totalCast = Convert.ToInt16(mealCoast) + tipPercent + taxPercent; // 14
Console.WriteLine("The total meal cost is {0} dollars.", totalCast); 

Console.ReadKey();

我是python的新手。我很感激你的帮助。感谢

1 个答案:

答案 0 :(得分:1)

调用.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