簡體   English   中英

獲取每個組中的特定值並將其添加為每個組中的新列

[英]get specific value in each group and add it as new column in each group

我想要這樣的東西:


數據框:

 col1            col2             col3
A               'aa'            date1
A               'aa'            date2
A               'aa'            date3
A               'bb'            date4
B               'aa'            date5
B               'bb'            date6
B               'aa'            date7

輸出:

  col1            col2             col3        col4       
    A               'aa'            date1        date4
    A               'aa'            date2        date4 
    A               'aa'            date3        date4
    A               'bb'            date4        date4
    B               'aa'            date5        date6
    B               'bb'            date6        date6
    B               'aa'            date7        date6

我想按 col1 分組並根據 col2 中的值獲取 col3 並添加一個新列作為 col4 並將其設置為 col3 的這個值

'aa' 和 'bb' 是例子,所以我不能使用排序......我應該將它與一個值進行比較。

嘗試:

df=df.sort_values("col2", ascending=False).set_index("col1")

df["col4"]=df.groupby("col1")["col3"].first()

df=df.reset_index(drop=False)

輸出:

  col1 col2   col3   col4
0    A   bb  date4  date4
1    B   bb  date6  date6
2    A   aa  date1  date4
3    A   aa  date2  date4
4    A   aa  date3  date4
5    B   aa  date5  date6
6    B   aa  date7  date6

編輯IIUC - 從col3獲取col4的值,按col1分組,其中col2=="bb"

嘗試:

df=df.set_index("col1")

df["col4"]=df.loc[df["col2"]=="bb"].groupby("col1")["col3"].first()

df=df.reset_index(drop=False)

如果每組只有一個bb值,則過濾它們並為新列過濾Series.map

s = df[df['col2'].eq('bb')].set_index('col1')['col3']
#if possible multiple values per groups
#s = df[df['col2'].eq('bb')].drop_duplicates('col1').set_index('col1')['col3']
df['col4'] = df['col1'].map(s)
print (df)
  col1 col2   col3   col4
0    A   aa  date1  date4
1    A   aa  date2  date4
2    A   aa  date3  date4
3    A   bb  date4  date4
4    B   aa  date5  date6
5    B   bb  date6  date6
6    B   aa  date7  date6

左連接merge另一個想法:

df1 = df.loc[df['col2'].eq('bb'),['col1','col3']].rename(columns={'col3':'col4'})

如果每組重復bb值:

df1 = (df.loc[df['col2'].eq('bb'),['col1','col3']]
         .drop_duplicates('col1')
         .rename(columns={'col3':'col4'}))

print (df1)
  col1   col4
3    A  date4
5    B  date6

df = df.merge(df1, on='col1', how='left')
print (df)
  col1 col2   col3   col4
0    A   aa  date1  date4
1    A   aa  date2  date4
2    A   aa  date3  date4
3    A   bb  date4  date4
4    B   aa  date5  date6
5    B   bb  date6  date6
6    B   aa  date7  date6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM