在我的数据框中,我想对某一列中的某些行求和,并将它们输出到新列“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
最佳答案
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”(问题中新添加的)有帮助……
–
|
–
–
|