pandas dataframe创建一个新列,其值基于另一列上的groupby sum

时间:2017-12-07 18:05:36

标签: python-3.x pandas numpy dataframe

我正在尝试为amount_0_flag创建新列df,该列中的值基于groupby另一列key,如果amount 1}} sum为0,True分配给amount_0_flag,否则为Falsedf看起来像,

key    amount    amount_0_flag    negative_amount
1       1.0      True             False
1       1.0      True             True
2       2.0      False            True
2       3.0      False            False
2       4.0      False            False

因此,当df.groupby('key'),群集key=1时,会为群集的每个元素分配Trueamount_0_flag,因为在群集中,一个元素为负1另一个元素将{1}作为amount s。

df.groupby('key')['amount'].sum()

仅为每个群集提供amount的总和而不考虑negative_amount中的值,我想知道如何找到群集及其行0总和量{{1}使用pandas / numpy的值。

1 个答案:

答案 0 :(得分:2)

让我们试试这个,我创建了一个'new_column',显示与'amount_0_flag'的比较:

df['new_column'] = (df.assign(amount_n = df.amount * np.where(df.negative_amount,-1,1))
                      .groupby('key')['amount_n']
                      .transform(lambda x: sum(x)<=0))

输出:

   key  amount  amount_0_flag  negative_amount  new_column
0    1     1.0           True            False        True
1    1     1.0           True             True        True
2    2     2.0          False             True       False
3    2     3.0          False            False       False
4    2     4.0          False            False       False