pandas有段代码不理解
今天做pandas一道题
题目:df2新增 flag 列,flag 由 group 和 price 组合而成。但是,部分行的值为空,部分有值,有值的是所在 group 分组内按 price 降序排列,并由 df1 的 amt 决定有值的数量。df1 中的 amt 为对应分组 group 的数量值。
df1 = pd.DataFrame({'group': [*'abcd'], 'amt': [1, 2,0,2]})
df2 = pd.DataFrame({'group': [*'aabbccdd'], 'price': range(10, 81, 10)})
print(df1)
print(df2)
def func(grp):
grp_new = grp.sort_values('price', ascending=False)
line_num = df1[df1.group == grp.name]['amt'].squeeze()
grp_new = grp_new.assign(flag=np.nan)
grp_new.loc[:line_num, 'flag'] = grp_new.iloc[:line_num].apply(lambda x: f'{x.group}{x.price}', axis=1)
return grp_new
print(df2.groupby('group',sort=False).apply(func))
运行结果: group price flag
group
a 1 a 20 a20
0 a 10 NaN
b 3 b 40 b40
2 b 30 b30
c 5 c 60 NaN
4 c 50 NaN
d 7 d 80 d80
6 d 70 d70
上述代码这段是AI帮改的,grp_new.loc[:line_num, ‘flag’] = grp_new.iloc[:line_num].apply(lambda x: f’{x.group}{x.price}’, axis=1),可是我认为grp_new.loc[:line_num, ‘flag’]中loc得到的是空,为什么grp_new.iloc[:line_num]中用iloc可以赋值过去不会报错,而且还得到正确的结果,请大佬帮忙小白解释下
推荐文章: