import pandas as pd
import numpy as np
df = pd.DataFrame([
[100, 'm1', 1, 4],
[200, 'm2', 7, 5],
[120, 'm1', 4, 4],
[240, 'm2', 8, 5],
[300, 'm3', 5, 4],
[330, 'm3', 2, 4],
[350, 'm3', 11, 4],
[200, 'm4', 9, 4]],
columns=['Col1', 'Col2', 'Col3', 'Col4'])
我想根据 Col2 组将数据分为两组。但是,第一个匹配项应分配一个值,其余匹配项应分配一个不同的值。Rahlf 帮我创建了一个函数
def my_function(x, val):
if x.shape[0]==1:
if x.iloc[0]>val:
return 'high'
else:
return 'low'
if x.iloc[0]>val and any(i<=val for i in x.iloc[1:]):
return 'high'
elif x.iloc[0]>val:
return 'med'
elif x.iloc[0]<=val:
return 'low'
else:
return np.nan
然后做
df['Col5'] = df.sort_values(['Col2','Col1']).groupby('Col2')['Col3'].transform(my_function, (4))
但是,我需要对该函数进行两次修改。而不是 val,它将从 Col 4 中获取相应的值,然后返回一个值(如“low”到组内的第一个匹配项(基于已排序的 col1),然后对其余部分说“low_red”组内比赛。
所以我的问题是如何修改函数来做到这一点?
沧海一幻觉
相关分类