根据另一列选择最小或最大的数字
Pick the smallest or highest number in accordance with another column
数据框中的一列有名字,每个名字至少重复10次,所以有很多名字。
在另一列中,我有数字。
我想添加两个新列,一个显示特定名称的最小数字(出现在 NUMBERS 列中),第二个显示最大数字。
这是一个与我的真实数据相似的虚拟数据,只是为了让我的问题更清楚:
IIUC,你可以试试
out = df.merge(df.groupby('Names')['NUMBERS']
.agg(**{'Lowest Number': 'min', 'Highest Number': 'max'}).reset_index())
示例数据:
df = pd.DataFrame({'name':['a','b','a','b','b','c','a','c'],
'val':[1,2,3,4,5,6,7,8]})
使用 groupby
、transform
和 apply
:
df['min'] = df.groupby('name')[['val']].transform(lambda g: g.min())
df['max'] = df.groupby('name')[['val']].transform(lambda g: g.max())
数据框中的一列有名字,每个名字至少重复10次,所以有很多名字。 在另一列中,我有数字。 我想添加两个新列,一个显示特定名称的最小数字(出现在 NUMBERS 列中),第二个显示最大数字。
这是一个与我的真实数据相似的虚拟数据,只是为了让我的问题更清楚:
IIUC,你可以试试
out = df.merge(df.groupby('Names')['NUMBERS']
.agg(**{'Lowest Number': 'min', 'Highest Number': 'max'}).reset_index())
示例数据:
df = pd.DataFrame({'name':['a','b','a','b','b','c','a','c'],
'val':[1,2,3,4,5,6,7,8]})
使用 groupby
、transform
和 apply
:
df['min'] = df.groupby('name')[['val']].transform(lambda g: g.min())
df['max'] = df.groupby('name')[['val']].transform(lambda g: g.max())