python groupby 分组后如何用每一组的值减去每一组的最小值?
id case eid
1 0 0
3 0 1
4 0 2
7 0 3
9 0 4
11 0 5
2 1 0
5 1 1
6 1 2
8 1 3
10 1 4
12 1 5
数据如上。
df = pd.read_csv("/content/test.csv")
plt.figure(figsize=(13,10), dpi= 80)
print(df)
sns.boxplot(x='case', y='id', data=df, notch=False)
def add_n_obs(df,group_col,y):
medians_dict = {grp[0]:grp[1][y].median() for grp in df.groupby(group_col)}
xticklabels = [x.get_text() for x in plt.gca().get_xticklabels()]
n_obs = df.groupby(group_col)[y].size().values
for (x, xticklabel), n_ob in zip(enumerate(xticklabels), n_obs):
plt.text(x, medians_dict[xticklabel]*1.01, "#obs : "+str(n_ob), horizontalalignment='center', fontdict={'size':14}, color='white')
add_n_obs(df,group_col='case',y='id')
plt.title('Box Plot of Highway Mileage by Vehicle Class', fontsize=22)
plt.ylim(10)
plt.show()
以上是原始代码。
请问在python中使用pandas从csv文件中读取数据并按照cid分组后,如何将id列各组的值减去所在分组的最小值?
比如现在已经分成了两组,
cid=0的一组id最小值为1,所以id列变为0,2,3,6,8,10;
cid=1的一组id最小值为2,所以id列变为0,3,4,6,8,10。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
已解决。将
print(df)
位置换为下面两句即可分组之后所有组的最小值,大小为组的数量,与原数据维度不同,无法直接进行加减。利用
transform
函数可以将其扩充到和原来维度一样。