gpt4 book ai didi

python - Pandas:Dataframe 计算 - 带除法的新行、带总和和平均值的新列

转载 作者:行者123 更新时间:2023-12-04 03:25:31 30 4
gpt4 key购买 nike

所以我得到了一个看起来像这样的 Pandas DataFrame:

import pandas as pd

df1 = pd.DataFrame([[5618, 5863, 8873, 7903, 9477, 7177, 7648, 9592],
[5698, 6009, 8242, 7356, 6191, 8817, 7340, 11781],
[5721, 6858, 8401, 6826, 6910, 6243, 6814, 9704]],
columns=["Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "Jan", "Feb"])

Output:

Jul Aug Sep Oct Nov Dec Jan Feb
0 5618 5863 8873 7903 9477 7177 7648 9592
1 5698 6009 8242 7356 6191 8817 7340 11781
2 5721 6858 8401 6826 6910 6243 6814 9704

首先我想插入 2 个索引为 3 和 4 的新行:在第一个中,我想将第 1 行的值除以第 0 行的值:

    Jul     Aug     Sep     Oct     Nov     Dec     Jan     Feb
3 101,42 102,49 92,88 93,07 65,32 122,8 95,97 122,82

在第二个中,我想用第 1 行的值除以第 2 行的值:

    Jul     Aug     Sep     Oct     Nov     Dec     Jan     Feb
4 99,59 87,62 98,10 107,76 89,59 141,23 107,71 121,40

在下一步中,我想创建一个新列,其中包含当月原始值与新创建行的平均值之和。

df1["Sum_Avg"] = df1.sum(axis=1)

Output:

Jul Aug Sep Oct Nov Dec Jan Feb Sum_Avg
0 5618 5863 8873 7903 9477 7177 7648 9592 62151
1 5698 6009 8242 7356 6191 8817 7340 11781 61434
2 5721 6858 8401 6826 6910 6243 6814 9704 57477

我不知道如何创建索引为 3 和 4 的行,所以我什至不知道如何将平均值与求和放在同一行中。

最后完整的表格应该是这样的: Img

到目前为止我尝试了什么:

用第 0 行创建一个新的 DataFrame:

df2 = pd.DataFrame(df1.iloc[[0]])
df2

Output:

Jul Aug Sep Oct Nov Dec Jan Feb
0 5618 5863 8873 7903 9477 7177 7648 9592

用第 1 行创建一个新的 DataFrame:

df3 = pd.DataFrame(df1.iloc[[1]])
df3

Output:

Jul Aug Sep Oct Nov Dec Jan Feb
1 5698 6009 8242 7356 6191 8817 7340 11781

用 df2 和 df3 的划分创建一个新的 DataFrame:

df4 = df3/df2
df4

Output:

Jul Aug Sep Oct Nov Dec Jan Feb
0 NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN

这里的事情搞砸了,这就是我创建这篇文章的原因。

最佳答案

使用DataFrame.div值偏移 DataFrame.shift , 通过索引删除第一个 NaN 行并通过 concat 添加到原始行:

df1["Sum_Avg"] = df1.sum(axis=1)
df = pd.concat([df1, df1.div(df1.shift()).iloc[1:]], ignore_index=True)
print (df)
Jul Aug Sep Oct Nov \
0 5618.000000 5863.000000 8873.000000 7903.000000 9477.000000
1 5698.000000 6009.000000 8242.000000 7356.000000 6191.000000
2 5721.000000 6858.000000 8401.000000 6826.000000 6910.000000
3 1.014240 1.024902 0.928885 0.930786 0.653266
4 1.004037 1.141288 1.019291 0.927950 1.116136

Dec Jan Feb Sum_Avg
0 7177.000000 7648.000000 9592.000000 62151.000000
1 8817.000000 7340.000000 11781.000000 61434.000000
2 6243.000000 6814.000000 9704.000000 57477.000000
3 1.228508 0.959728 1.228211 0.988464
4 0.708064 0.928338 0.823699 0.935589

输出数据的解决方案:

df1["Sum_Avg"] = df1.sum(axis=1)
df = pd.concat([df1, df1.iloc[1].div(df1.iloc[[0,2]]) ], ignore_index=True)


print (df)
Jul Aug Sep Oct Nov \
0 5618.00000 5863.000000 8873.000000 7903.000000 9477.000000
1 5698.00000 6009.000000 8242.000000 7356.000000 6191.000000
2 5721.00000 6858.000000 8401.000000 6826.000000 6910.000000
3 1.01424 1.024902 0.928885 0.930786 0.653266
4 0.99598 0.876203 0.981074 1.077644 0.895948

Dec Jan Feb Sum_Avg
0 7177.000000 7648.000000 9592.000000 62151.000000
1 8817.000000 7340.000000 11781.000000 61434.000000
2 6243.000000 6814.000000 9704.000000 57477.000000
3 1.228508 0.959728 1.228211 0.988464
4 1.412302 1.077194 1.214035 1.068845

关于python - Pandas:Dataframe 计算 - 带除法的新行、带总和和平均值的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67684334/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com