[英]Python Pandas dataframe - add a new column based on index value
[英]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.