Python 熊猫:我如何分组,但前提是数据满足该组中的特定条件。i、 e.*仅当*该组中有负值时

Python 熊猫:我如何分组,但前提是数据满足该组中的特定条件。i、 e.*仅当*该组中有负值时,python,pandas,Python,Pandas,请帮助,我需要修复df中的一列,该列根据其组分配值(a或b)。如果组的总和大约为0(接受-50到100之间的任意值),则将其编码为'a'。如果不是,则将其编码为'b' 我的列是:['Assets','Value'] Asset Value 0 2000 500 1 2000 -500 2 3000 1000 3 3000 1000 4 4000 3000 5 4000 -100 6 5000 -100

请帮助,我需要修复df中的一列,该列根据其组分配值(
a
b
)。如果组的总和大约为0(接受-50到100之间的任意值),则将其编码为
'a'
。如果不是,则将其编码为
'b'

我的列是:
['Assets','Value']

   Asset  Value  
0  2000    500   
1  2000   -500   
2  3000    1000  
3  3000    1000  
4  4000    3000  
5  4000   -100   
6  5000   -100   
7  5000    9000  
到目前为止,我已经做到了:

df['Sum_Assets']=df['Value'].groupby(df['Asset'])。transform('Sum')

然后我做了:

    (df['Sum_Assets'] > -50) & (df['Sum_Assets'] <= 100),
    (df['Sum_Assets'] <= -50),
    (df['Sum_Assets'] > 100 ),
    ]

# create a list of the values to assign for each condition
values = ['a', 'b', 'b']

# create new column and assign values to it
df['Action'] = np.select(conditions, values)
应该是:

df.Asset = df.Asset.astype(int)
df.Value = df.Value.str.replace(',', '').astype(float).astype(int) 
df['Sum_Assets'] = df.groupby('Asset')['Value'].transform('sum')
conditions = [
    (df['Sum_Assets'].gt(50)) & (df['Sum_Assets'].le(100)),
    (df['Sum_Assets'].le(-50)) | (df['Sum_Assets'].gt(100))
    ]
values = ['a', 'b']

df['Action'] = np.where(df.Value<0, None,np.select(conditions, values))
df.Asset=df.Asset.astype(int)
df.Value=df.Value.str.replace(',','').astype(float.astype(int)
df['Sum_Assets']=df.groupby('Asset')['Value'].transform('Sum'))
条件=[
(df['Sum_Assets'].gt(50))和(df['Sum_Assets'].le(100)),
(df['Sum_Assets'].le(-50))|(df['Sum_Assets'].gt(100))
]
值=['a','b']

df['Action']=np.where(df.ValuePost以文本形式发布您的数据帧,而不是pix,并发布您的预期输出。您是否仍被卡住?请根据需要随时修改代码:)
df.Asset = df.Asset.astype(int)
df.Value = df.Value.str.replace(',', '').astype(float).astype(int) 
df['Sum_Assets'] = df.groupby('Asset')['Value'].transform('sum')
conditions = [
    (df['Sum_Assets'].gt(50)) & (df['Sum_Assets'].le(100)),
    (df['Sum_Assets'].le(-50)) | (df['Sum_Assets'].gt(100))
    ]
values = ['a', 'b']

df['Action'] = np.where(df.Value<0, None,np.select(conditions, values))