簡體   English   中英

添加包含一個值的新列

[英]Add new column with one value

我有以下數據幀:

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()

您可以使用.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

還要注意鏈接索引 (你正在用aciloc[-2:]做什么)在文檔中明確不鼓勵,因為pandas將這些操作視為單獨的事件,即對__getitem__兩次單獨調用,而不是使用a的單個調用。嵌套的切片元組。

您可以預先設置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

我們可以使用.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM