在Pandas 2.0中向DataFrame追加一行

new9mtju  于 2023-05-05  发布在  其他
关注(0)|答案(1)|浏览(133)

我有一个DF如下。我添加了一个新列,其中包含所有行的总计,以及一个新行,其中包含所有列的总计:

A  B  C   D   Total
-------------------
1  2   3   4   10
5  6   7   8   26
6  8  10  12   36

现在我需要再添加一行,其中第一个元素是NaN,其余元素是从Total行中的前一列中减去的列。

A B C D Total
1 2 3 4 10
5 6 7 8 26
6 8 10 12 36
NaN 2 2 2 24 <--- new row

谢谢

ao218c7q

ao218c7q1#

这将是df.append的罕见用例之一,但取而代之的是,您可以使用iloc[-1]diff提取最后一行,然后将其与原始值组合起来。

选项1

进行这种连接的一种方法是使用pd.concat

df2 = pd.concat([df, df.iloc[-1].diff().to_frame().T])
print (df2) 

     A    B     C     D  Total
0  1.0  2.0   3.0   4.0   10.0
1  5.0  6.0   7.0   8.0   26.0
2  6.0  8.0  10.0  12.0   36.0
2  NaN  2.0   2.0   2.0   24.0

在哪里

df.iloc[-1].diff().to_frame().T # dataframe with 1 row

    A    B    C    D  Total
2 NaN  2.0  2.0  2.0   24.0

选项二

另一种使用loc的就地赋值的方法是:

df.loc[len(df.index)] = df.iloc[-1].diff()
print (df)

     A    B     C     D  Total
0  1.0  2.0   3.0   4.0   10.0
1  5.0  6.0   7.0   8.0   26.0
2  6.0  8.0  10.0  12.0   36.0
3  NaN  2.0   2.0   2.0   24.0

在哪里

df.iloc[-1].diff()  # series

A         NaN
B         2.0
C         2.0
D         2.0
Total    24.0
Name: 2, dtype: float64

选项三

这里有一个对字典和pd.DataFrame有一点乐趣的选项:

pd.DataFrame([*df.to_dict('records'), df.iloc[-1].diff().to_dict()])

     A    B     C     D  Total
0 1.00 2.00  3.00  4.00  10.00
1 5.00 6.00  7.00  8.00  26.00
2 6.00 8.00 10.00 12.00  36.00
3  NaN 2.00  2.00  2.00  24.00

选项4 [已弃用]

在旧版本(pandas〈= 1.4)上,我建议像这样使用append

df2 = df.append(df.iloc[-1].diff(), ignore_index=True)

相关问题