Python 添加具有一个值的新列

Python 添加具有一个值的新列,python,pandas,Python,Pandas,我有以下数据帧: a=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9],[10,11,12]],列=['a','b','c']) A. 出[234]: a、b、c 0 1 2 3 1 4 5 6 2 7 8 9 3 10 11 12 我想添加一列,其中只有最后一行作为列c最后两个值的平均值。比如: a b c d 0 1 2 3 NaN 1 4 5 6 NaN 2 7 8

我有以下数据帧:

a=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9],[10,11,12]],列=['a','b','c'])
A.
出[234]:
a、b、c
0   1   2   3
1   4   5   6
2   7   8   9
3  10  11  12
我想添加一列,其中只有最后一行作为列
c
最后两个值的平均值。比如:

    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()
您可以使用在单个行/列标签对上分配:

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


还要注意的是,文档中明确不鼓励使用
a.c.iloc[-2://code>),因为pandas将这些操作视为单独的事件,即对
\uuuu getitem\uuuuu
的两个单独调用,而不是使用嵌套的切片元组的单个调用。

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


我们可以使用
.loc
.iloc
np.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
或者只使用
.loc
np.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

.iloc
就是这样做的。
.loc
将在没有
范围索引时中断。我的经验是链式分配是有问题的。链式选择
a.c.iloc[-2:]
,当你把东西链到左手边时,它就是有问题的。是的,我明白你说的有问题是什么意思,虽然有人提到它不必要地执行两个调用
\uu getitem\uuuuz
@ALollz
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