Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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 有没有一种方法可以在不使用“Q”的情况下向cumsum添加条件;切割“;我的桌子?_Python_Pandas - Fatal编程技术网

Python 有没有一种方法可以在不使用“Q”的情况下向cumsum添加条件;切割“;我的桌子?

Python 有没有一种方法可以在不使用“Q”的情况下向cumsum添加条件;切割“;我的桌子?,python,pandas,Python,Pandas,我找到了计算YTD(年初至今)值的代码(基本上是应用于“年”上传递的group by函数的累计总和)。 但是现在,我只想在“Type”列是“实际”而不是“预算”时使用此累计金额。我希望为whenType=“Budget”设置空白,或者理想情况下,我希望为Type=“Budget”所在的所有行显示332(YTD的最后一个值) 初始表格: Value Type year month 0 100 Actual 2018 1 1 50 Actual

我找到了计算YTD(年初至今)值的代码(基本上是应用于“年”上传递的group by函数的累计总和)。 但是现在,我只想在“Type”列是“实际”而不是“预算”时使用此累计金额。我希望为when
Type
=“Budget”设置空白,或者理想情况下,我希望为Type=“Budget”所在的所有行显示332(YTD的最后一个值)

初始表格:

     Value  Type   year  month
0     100  Actual  2018      1
1      50  Actual  2018      2
2      20  Actual  2018      3
3     123  Actual  2018      4
4      56  Actual  2018      5
5      76  Actual  2018      6
6      98  Actual  2018      7
7     126  Actual  2018      8
8      90  Actual  2018      9
9      80  Actual  2018     10
10     67  Actual  2018     11
11     87  Actual  2018     12
12    101  Actual  2019      1
13     98  Actual  2019      2
14     76  Actual  2019      3
15     57  Actual  2019      4
16     98  Budget  2019      5
17    109  Budget  2019      6
18    123  Budget  2019      7
19     67  Budget  2019      8
20     98  Budget  2019      9
21     67  Budget  2019     10
22     98  Budget  2019     11
23    123  Budget  2019     12
这是生成实际表格的代码

df['YTD'] = df.groupby('year')['Value'].cumsum()


     Value  Type   year    month YTD
0     100  Actual  2018      1   100
1      50  Actual  2018      2   150
2      20  Actual  2018      3   170
3     123  Actual  2018      4   293
4      56  Actual  2018      5   349
5      76  Actual  2018      6   425
6      98  Actual  2018      7   523
7     126  Actual  2018      8   649
8      90  Actual  2018      9   739
9      80  Actual  2018     10   819
10     67  Actual  2018     11   886
11     87  Actual  2018     12   973
12    101  Actual  2019      1   101
13     98  Actual  2019      2   199
14     76  Actual  2019      3   275
15     57  Actual  2019      4   332
16     98  Budget  2019      5   430
17    109  Budget  2019      6   539
18    123  Budget  2019      7   662
19     67  Budget  2019      8   729
20     98  Budget  2019      9   827
21     67  Budget  2019     10   894
22     98  Budget  2019     11   992
23    123  Budget  2019     12  1115
所需表格:

         Value  Type   year    month YTD
    0     100  Actual  2018      1   100
    1      50  Actual  2018      2   150
    2      20  Actual  2018      3   170
    3     123  Actual  2018      4   293
    4      56  Actual  2018      5   349
    5      76  Actual  2018      6   425
    6      98  Actual  2018      7   523
    7     126  Actual  2018      8   649
    8      90  Actual  2018      9   739
    9      80  Actual  2018     10   819
    10     67  Actual  2018     11   886
    11     87  Actual  2018     12   973
    12    101  Actual  2019      1   101
    13     98  Actual  2019      2   199
    14     76  Actual  2019      3   275
    15     57  Actual  2019      4   332
    16     98  Budget  2019      5   332
    17    109  Budget  2019      6   332
    18    123  Budget  2019      7   332
    19     67  Budget  2019      8   332
    20     98  Budget  2019      9   332
    21     67  Budget  2019     10   332
    22     98  Budget  2019     11   332
    23    123  Budget  2019     12   332
我发现的一个解决方案是简单地设置一个条件(其中Type=“Actual”),但在这种情况下,整个表不会显示,而我需要完全显示它

你有办法克服部分选择的问题吗

多谢各位

Alex

我们只选择
Type=Actual
的行,并将
cumsum
分配给新列
YTD

然后我们用
GroupBy.ffill
来填补
NaN
的空白:

m = df['Type'].eq('Actual')
df.loc[m, 'YTD'] = df.loc[m].groupby('year')['Value'].cumsum()
df['YTD'] = df.groupby('year')['YTD'].ffill()

    Value    Type  year  month    YTD
0     100  Actual  2018      1  100.0
1      50  Actual  2018      2  150.0
2      20  Actual  2018      3  170.0
3     123  Actual  2018      4  293.0
4      56  Actual  2018      5  349.0
5      76  Actual  2018      6  425.0
6      98  Actual  2018      7  523.0
7     126  Actual  2018      8  649.0
8      90  Actual  2018      9  739.0
9      80  Actual  2018     10  819.0
10     67  Actual  2018     11  886.0
11     87  Actual  2018     12  973.0
12    101  Actual  2019      1  101.0
13     98  Actual  2019      2  199.0
14     76  Actual  2019      3  275.0
15     57  Actual  2019      4  332.0
16     98  Budget  2019      5  332.0
17    109  Budget  2019      6  332.0
18    123  Budget  2019      7  332.0
19     67  Budget  2019      8  332.0
20     98  Budget  2019      9  332.0
21     67  Budget  2019     10  332.0
22     98  Budget  2019     11  332.0
23    123  Budget  2019     12  332.0