[英]Change pandas dataframe column values based on other columns in dataframe
[英]Change the value of a pandas dataframe column based on a condition ,also depending on other columns of the dataframe
Category DishName Id
0 a Pistachio 621f4884e48bc60012364b13
1 a Pistachio 621f4884e48bc60012364b13
2 a Pistachio 621f4884e48bc60012364b13
3 a achar 621f4884e48bc60012364b13
4 b achar 621f4884e48bc60012364b13
5 b achar 621f4884e48bc60012364b13
6 a chicken 621f4884e48bc60012364b13
7 b chicken 621f4884e48bc60012364b13
8 c chicken 621f4884e48bc60012364b13
我的数据框有 3 列类别、菜名和 ID。 考虑到 id 和菜名,我必须分配类别。
如果所有类别值都是“a”,则分配“a”
如果类别值为“a”、“b”,则分配“b”
如果类别值为“a”、“b”、“c”,则分配“c”
预期输出为
Category DishName Id
0 a Pistachio 621f4884e48bc60012364b13
1 a Pistachio 621f4884e48bc60012364b13
2 a Pistachio 621f4884e48bc60012364b13
3 b achar 621f4884e48bc60012364b13
4 b achar 621f4884e48bc60012364b13
5 b achar 621f4884e48bc60012364b13
6 c chicken 621f4884e48bc60012364b13
7 c chicken 621f4884e48bc60012364b13
8 c chicken 621f4884e48bc60012364b13
您可以转换为有序分类并获得每组的最大值:
df['Category'] = (pd
.Series(pd.Categorical(df['Category'],
categories=['a', 'b', 'c'], ordered=True),
index=df.index)
.groupby(df['DishName'])
.transform('max')
)
注意。 您不需要简单的分类a, b, c
,因为这三个是按字典顺序排序的,但我想现实生活中的情况不一定如此。 例如low < medium < high
在逻辑上但不是按字典排序。
输出:
Category DishName Id
0 a Pistachio 621f4884e48bc60012364b13
1 a Pistachio 621f4884e48bc60012364b13
2 a Pistachio 621f4884e48bc60012364b13
3 b achar 621f4884e48bc60012364b13
4 b achar 621f4884e48bc60012364b13
5 b achar 621f4884e48bc60012364b13
6 c chicken 621f4884e48bc60012364b13
7 c chicken 621f4884e48bc60012364b13
8 c chicken 621f4884e48bc60012364b13
df['Category'] = df.groupby('DishName')['Category'].transform('max')
输出:
Category DishName Id
0 a Pistachio 621f4884e48bc60012364b13
1 a Pistachio 621f4884e48bc60012364b13
2 a Pistachio 621f4884e48bc60012364b13
3 b achar 621f4884e48bc60012364b13
4 b achar 621f4884e48bc60012364b13
5 b achar 621f4884e48bc60012364b13
6 c chicken 621f4884e48bc60012364b13
7 c chicken 621f4884e48bc60012364b13
8 c chicken 621f4884e48bc60012364b13
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.