在我的数据框中,我想对某一列中的某些行求和,并将它们输出到新列“UE_more_days”中

    ATEXT   BEGUZ_UE   UE_more_days
0             11.00            0.0
1     CT      23.00            Nan
2     RT      33.00           46.0
3             15.00            0.0
3             15.00            0.0
4             12.75            0.0
5             19.75            0.0
6             14.75            0.0
7     CT      23.00           29.5
8     CT      24.00           46.0
9     CT      24.00           48.0
10    RT      33.00           48.0
11            15.00            0.0
12
etc

应该

    ATEXT   BEGUZ_UE   UE_more_days
0
1     CT      23.00
2     RT      33.00           56.0
3             15.00
4             12.75
5             19.75
6             14.75
7     CT      23.00
8     CT      24.00
9     CT      24.00
10    RT      33.00          104.0
11            15.00
12
etc

应该是 2

    ATEXT   BEGUZ_UE    subtract      add      UE_more_days  ist_m_days
0             11.00     *0.00*        *3.92*
1     CT      *23.00*    0.00         0.00
2     RT      *33.00*    0.00         0.00          56.0
3             *15.00*    0.20         0.00                      *74.92*
4             12.75         
5             19.75
6             14.75     *2.00*       *0.00*
7     CT      *23.00*
8     CT      *24.00*
9     CT      *24.00*
10    TT      *33.00*                              104.0
11            *15.00*    0.00         3.57                     *117.00*
12
etc

我最后一次尝试

bedd2 = [(df['ATEXT'] != ''),]
result2 = [(df.iloc[0:]['BEGUZ_UE'].astype(float).reset_index(drop=True) +
df.iloc[1:]['BEGUZ_UE'].astype(float)).round(decimals=2).shift(1)]
df['min_UE_mehr_Tage'] = np.select(bedd2, result2)

如何根据条件对某一列中的行求和并将其输出到新列中?

2

  • 欢迎来到 Stack Overflow!使用标​​签前请先阅读标签说明。来自:“除非您的问题仅适用于 PYTHON 3,否则请勿使用。请始终与标准 [python] 标签一起使用。”


    – 

  • 谢谢您的欢迎和信息。


    – 


最佳答案
2

将 BEGUZ_UE 中 ATEXT 等于“”的值替换为 Nan,然后根据相同条件创建组。

m = df['ATEXT'].eq("")
cond = (~m) & m.shift(-1)
df['UE_more_days'] = (df['BEGUZ_UE'].mask(m)
                      .groupby(m.cumsum()).cumsum()
                      .where(cond)
                     )

最终结果:

ATEXT  BEGUZ_UE  UE_more_days
          11.00           NaN
   CT     23.00           NaN
   RT     33.00          56.0
          15.00           NaN
          15.00           NaN
          12.75           NaN
          19.75           NaN
          14.75           NaN
   CT     23.00           NaN
   CT     24.00           NaN
   CT     24.00           NaN
   RT     33.00         104.0
          15.00           NaN

3

  • 非常感谢,它有效。还有一件事我想知道:第 4 行:… eq(‘RT’) 不是决定因素,而是 eq(‘每个组的最后一个元素’)。(最后一个元素可以是 = ‘RT’、’CT’ 或其他)。


    – 

  • 我修改了代码。现在它应该适用于每个值。


    – 

  • 就这样。非常感谢,Triky ☺。


    – 

df1['target'] = df1['BEGUZ_UE'].where(df1['ATEXT'].isin(['CT', 'RT']))
df1['target'].fillna(0, inplace=True)

df1['group'] = (df1['ATEXT'] == 'RT').shift().fillna(0).cumsum()

df1['target_sum'] = df1.groupby('group')['target'].cumsum()
df1['last_UE_more_days'] = df1['target_sum'].where(df1['ATEXT'] == 'RT')

最终结果:

   ATEXT  BEGUZ_UE  UE_more_days  target  target_sum  last_UE_more_days
0            11.00           0.0     0.0         0.0                NaN
1     CT     23.00           NaN    23.0        23.0                NaN
2     RT     33.00          46.0    33.0        56.0               56.0
3            15.00           0.0     0.0         0.0                NaN
4            15.00           0.0     0.0         0.0                NaN
5            12.75           0.0     0.0         0.0                NaN
6            19.75           0.0     0.0         0.0                NaN
7            14.75           0.0     0.0         0.0                NaN
8     CT     23.00          29.5    23.0        23.0                NaN
9     CT     24.00          46.0    24.0        47.0                NaN
10    CT     24.00          48.0    24.0        71.0                NaN
11    RT     33.00          48.0    33.0       104.0              104.0
12           15.00           0.0     0.0         0.0                NaN

4

  • 谢谢你的解决方案,windbreeze ☺


    – 

  • 仍需解决的任务:将另一列的值添加到一个组(值 ‘BEGUZ_UE’),一个组上方一行(’ATEXT’ 中为空),一个组下方一行(’ATEXT’ 中也为空)。我会尝试找到解决方案!


    – 

  • 我在生成的数据框中遗漏了某些内容。可以将其删除,但我找不到模式。


    – 

  • 也许新的 Dataframe“应该是 2”(问题中新添加的)有帮助……


    –