New*_*bie 5 python dataframe pandas
我有一个 DF 如下。我添加了一个新列,其中包含所有行的总计和一个新行,其中包含所有列的总计:
A B C D Total
-------------------
1 2 3 4 10
5 6 7 8 26
6 8 10 12 36
Run Code Online (Sandbox Code Playgroud)
现在,我需要再添加一行,其中第一个元素将为 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
Run Code Online (Sandbox Code Playgroud)
谢谢
这将是 的罕见用例之一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
Run Code Online (Sandbox Code Playgroud)
在哪里,
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
Run Code Online (Sandbox Code Playgroud)
选项 2
另一种使用就地赋值的方法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
Run Code Online (Sandbox Code Playgroud)
在哪里,
df.iloc[-1].diff() # series
A NaN
B 2.0
C 2.0
D 2.0
Total 24.0
Name: 2, dtype: float64
Run Code Online (Sandbox Code Playgroud)
选项 3
这是一个与字典 和 有点乐趣的选项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
Run Code Online (Sandbox Code Playgroud)
选项 4 [已弃用]
在旧版本 (pandas <= 1.4) 上,我建议使用append如下方式:
df2 = df.append(df.iloc[-1].diff(), ignore_index=True)
Run Code Online (Sandbox Code Playgroud)