在Pandas中找到另一列具有NAN的行中的值的总和

wgxvkvu9  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(101)

我有一个包含A列和B列的数据框架。列A具有非连续数据,其中一些行是NAN,而B具有连续数据。我想创建第三列,其中对于每组A行,NAN将具有B中那些相同行的值的总和+B中的下一个有效值。C中的所有其他值应该是NAN,A中的NAN和A中有效数字后面的行B的值。范例:

data = {
    'A': [1, 1, None, None, 2, 5, None, None,3 ,4, 3, None , 5],
    'B': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130]}

字符串
除了需要B + B中下一个有效值的和的行之外,一切都很正常。我使用以下代码。我有这个代码,但它似乎是一个混乱的现在。

`result = df.groupby(df['A'].isnull().cumsum())['B'].sum().reset_index()
df_result = pd.DataFrame({'C': result['Pumped']})
df_result.loc[1:, 'C'] -= result.loc[0, 'Pumped']

df.loc[~mask, 'C'] = df.loc[~mask, 'Pumped']

valid_rows_after_nan = df['dWL'].notnull() & mask.shift(1).fillna(False)

df.loc[valid_rows_after_nan, 'C'] = df_result

print(df)`


我希望输出如下所示:

`data = {
    'A': [1,  1, None, None, 2, 5, None, None,3 ,4, 3, None , 5],
    'B': [10, 20, 30,  40,  50, 60, 70, 80, 90, 100, 110, 120, 130],
    'C': [10, 20, None, None, 120, 60, None, None, 240, 100, 110, None, 5]
}

mwkjh3gx

mwkjh3gx1#

使用groupby.transform的简单版本:

# identify the non-NA and reverse
m = df.loc[::-1, 'A'].notna()

# group the preceding NA, sum, mask where NA
df['C'] = df.groupby(m.cumsum())['B'].transform('sum').where(m)

字符串
输出量:

A    B      C
0   1.0   10   10.0
1   1.0   20   20.0
2   NaN   30    NaN
3   NaN   40    NaN
4   2.0   50  120.0
5   5.0   60   60.0
6   NaN   70    NaN
7   NaN   80    NaN
8   3.0   90  240.0
9   4.0  100  100.0
10  3.0  110  110.0
11  NaN  120    NaN
12  5.0  130  250.0

相关问题