首页 > 解决方案 > 基于条件的函数计算

问题描述

我正在练习和新手在 Python 中创建一个具有条件的函数:

创建一个接受整数输入的函数(例如 m,其中 m 介于 2 到 n 之间,n 是最大行数)此函数计算最近 m 天的“Sum A”和“Sum B”。前 m 天没有任何价值

原始数据:

V       TP         A                   B             Sum A   Sum B
3509    47.81               
4862    48.406667   235353.2133         
1810    49.26           89160.6         
3824    49.263333   188382.9867         
2209    47.386667                   104677.1467     
4558    45.573333                   207723.2533     
3832    44.396667                   170128.0267     
3778    43.75                          165287.5     
1005    44.64           44863.2         
4047    43.76                         177096.72     
2201    44.383333   97687.71667                     655447.7167 824912.6467
2507    45.156667   113207.7633                     533302.2667 824912.6467
4392    44.4333                        195151.2     444141.6667 1020063.847
3497    43.296667                   151408.4433       255758.68 1171472.29
1181    43.07                          50865.67       255758.68 1117660.813
1971    42.89                          84536.19       255758.68 994473.75
4994    43.563333   217555.2867                     473313.9667 824345.7233
2017    44.816667   90395.21667                     563709.1833 659058.2233
2823    44.936667     126856.21                     645702.1933 659058.2233
2774    45.13         125190.62                     770892.8133 481961.5033

继续原始数据

Day
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

到目前为止我所做的尝试是它显示错误KeyError 'A'

curret_period = int(input("enter days: "))
sumA = curret_period * ((df["A"] < df["A"]),'')
sumB = curret_period * ((df["B"] >= df["B"]),'')
print(sumA)
print(sumB)

我想知道有没有更好的方法来创建函数?我还想知道下面是否是我需要的?

def function_name()
    print()

m= 10 时的预期结果:

    A                     B                        Sum A       Sum B
0                                           
1   235353.21333333332                      
2    89160.59999999999                      
3   188382.98666666663                      
4                        104677.1466666667  
5                       207723.25333333333  
6                       170128.02666666667  
7                                 165287.5  
8   44863.200000000004                      
9                                177096.72  
10   97687.71666666666                          655447.7167    824912.6467
11  113207.76333333334                          533302.2667    824912.6467
12                                195151.2      444141.6667    1020063.847
13                       151408.4433333333        255758.68     1171472.29
14                       50865.66999999999        255758.68    1117660.813 
15                       84536.19000000002        255758.68      994473.75
16  217555.28666666665                          473313.9667    824345.7233
17   90395.21666666666                          563709.1833    659058.2233
18           126856.21                          645702.1933    659058.2233
19  125190.61999999998                          770892.8133    481961.5033

有什么建议吗?先感谢您。

标签: pythonpandas

解决方案


您可以利用df.tail()获取数据框的最后m一行,然后简单地获取sum()每一列。

我们还可以检查是否m不大于数据帧的长度,但是即使您没有这个,它也只是sum整个数据帧。

def sumof(df, m):
    if m <= len(df.index):
        rows = df.tail(m)
        print(rows['A'].sum())
        print(rows['B'].sum())
    else:
        print("'m' can not be greater than length of dataframe")

推荐阅读