用一个值添加新列

时间:2019-07-04 14:49:18

标签: python pandas

我有以下数据框:

a = pd.DataFrame([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]], columns=['a','b','c'])
a
Out[234]: 
    a   b   c
0   1   2   3
1   4   5   6
2   7   8   9
3  10  11  12

我想添加一列,仅将最后一行作为列c的最后2个值的平均值。像这样:

    a   b   c   d
0   1   2   3  NaN
1   4   5   6  NaN
2   7   8   9  NaN
3  10  11  12 mean(9,12)

我尝试过,但是第一部分给出了错误:

a['d'].iloc[-1] = a.c.iloc[-2:].values.mean()

3 个答案:

答案 0 :(得分:3)

您可以使用.at在单个行/列标签对上进行分配:

ix = a.shape[0]
a.at[ix-1,'d'] = a.loc[ix-2:ix, 'c'].values.mean()

    a   b   c     d
0   1   2   3   NaN
1   4   5   6   NaN
2   7   8   9   NaN
3  10  11  12  10.5

还请注意,chained indexing(您对a.c.iloc[-2:]所做的操作)在文档中明确建议不要这样做,因为熊猫将这些操作视为单独的事件,即对{{1}的两次单独调用},而不是使用切片的嵌套元组调用。

答案 1 :(得分:2)

您可以预先设置d列(以确保分配):

In [100]: a['d'] = np.nan

In [101]: a['d'].iloc[-1] = a.c.iloc[-2:].mean()

In [102]: a
Out[102]: 
    a   b   c     d
0   1   2   3   NaN
1   4   5   6   NaN
2   7   8   9   NaN
3  10  11  12  10.5

答案 2 :(得分:1)

我们可以使用.loc.ilocnp.mean

a.loc[a.index.max(), 'd'] = np.mean(a.iloc[-2:, 2])

    a   b   c     d
0   1   2   3   NaN
1   4   5   6   NaN
2   7   8   9   NaN
3  10  11  12  10.5

或者仅使用.locnp.mean

a.loc[a.index.max(), 'd'] = np.mean(a.loc[a.index.max()-1:, 'c'])

    a   b   c     d
0   1   2   3   NaN
1   4   5   6   NaN
2   7   8   9   NaN
3  10  11  12  10.5