Python 熊猫:数据帧计算-带除法的新行,带总和和平均值的新列
所以我得到了一个熊猫数据框,看起来像这样:Python 熊猫:数据帧计算-带除法的新行,带总和和平均值的新列,python,pandas,calculation,Python,Pandas,Calculation,所以我得到了一个熊猫数据框,看起来像这样: 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, 970
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
首先,我想插入索引为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的行,所以我甚至不知道如何将平均值与总和放在同一行中
最后,整个表格应如下所示:
到目前为止我所尝试的:
使用第0行创建新的数据帧:
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行创建新的数据帧:
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的划分生成新的数据帧:
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
这里的事情一团糟,这就是我创建此帖子的原因。使用移位值by,通过索引仅删除第一行NaN
行,并通过以下方式添加到原始行:
输出数据的解决方案:
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
你可以试试这个:
df = df1.T
df[3] = df[1] / df[0]
df[4] = df[1] / df[2]
df1 = df.T
df1["Sum_Avg"] = df1.sum(axis=1)
# Jul Aug ... Feb Sum_Avg
# 0 5618.00000 5863.000000 ... 9592.000000 62151.000000
# 1 5698.00000 6009.000000 ... 11781.000000 61434.000000
# 2 5721.00000 6858.000000 ... 9704.000000 57477.000000
# 3 1.01424 1.024902 ... 1.228211 7.968526
# 4 0.99598 0.876203 ... 1.214035 8.530380
# [5 rows x 9 columns]
请注意,您的示例与您描述的不同
在第二个示例中,我想将第1行的值除以第2行的值:
看起来实际上是第2行/1行
df = df1.T
df[3] = df[1] / df[0]
df[4] = df[1] / df[2]
df1 = df.T
df1["Sum_Avg"] = df1.sum(axis=1)
# Jul Aug ... Feb Sum_Avg
# 0 5618.00000 5863.000000 ... 9592.000000 62151.000000
# 1 5698.00000 6009.000000 ... 11781.000000 61434.000000
# 2 5721.00000 6858.000000 ... 9704.000000 57477.000000
# 3 1.01424 1.024902 ... 1.228211 7.968526
# 4 0.99598 0.876203 ... 1.214035 8.530380
# [5 rows x 9 columns]