Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:数据帧计算-带除法的新行,带总和和平均值的新列_Python_Pandas_Calculation - Fatal编程技术网

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]