簡體   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