繁体   English   中英

根据groupby值将新列添加到pandas数据框中

[英]add a new column to a pandas dataframe based on groupby value

我有一个数据框:

  date                value
1/1/2017               -3
1/1/2017               -1 
1/1/2017                5 
1/2/2017                4
1/2/2017                9
1/2/2017               -1

我想做的是添加一个额外的列is_min ,如果此日期的值最小,则该列将为1 ,否则为0

所以结果应该是:

 date                 value            is_min
1/1/2017               -3                1
1/1/2017               -1                0 
1/1/2017                5                0 
1/2/2017                4                0
1/2/2017                9                0 
1/2/2017               -1                1

我尝试过类似的事情

df['is_min']=df['value']==df.groupby('date')['value'].min()

但是,当然, df['value']df.groupby('date')['value'].min()的长度不匹配...

您可以使用DataFrameGroupBy.idxmin为发现最小的指数group ,然后通过测试会员isin

df['is_min'] = df.index.isin(df.groupby('date')['value'].idxmin()).astype(int)
print (df)
       date  value  is_min
0  1/1/2017     -3       1
1  1/1/2017     -1       0
2  1/1/2017      5       0
3  1/2/2017      4       0
4  1/2/2017      9       0
5  1/2/2017     -1       1

df['is_min'] = 0
df.loc[df.index.isin(df.groupby('date')['value'].idxmin()), 'is_min'] = 1
print (df)
       date  value  is_min
0  1/1/2017     -3       1
1  1/1/2017     -1       0
2  1/1/2017      5       0
3  1/2/2017      4       0
4  1/2/2017      9       0
5  1/2/2017     -1       1

使用GroupBy对象的transform()方法:

df['ismin'] = df.groupby('date')['value'].transform(lambda x: x == np.min(x)) 

它返回原始格式的完整大小的DataFrame,并应用了转换函数。 请注意,在进行转换之前,我在“值”列上有一个子集,因为transform()应用于分组对象的整个列集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM