簡體   English   中英

根據 pandas 中每個排序組的第一行創建一列

[英]Create a column based on first row of each sorted group in pandas

我想根據兩列對 dataframe 進行分組,並根據另一列對每個組進行排序,然后根據每個組的第一行為每個組創建新列!(col3 是我數據集中的日期)

dataframe:

col1            col2         col3
A               0            2.0
A               0            1.0
A               0            3.0
A               1            3.0
A               1            4.0
B               0            3.0
B               0            1.0
B               1            1.0
B               1            1.0

output:

col1            col2         col3           col4
A               0            2.0        1.0
A               0            1.0        1.0
A               0            3.0        1.0
A               1            3.0        3.0
A               1            4.0        3.0
B               0            3.0        1.0
B               0            1.0        1.0
B               1            0.0        0.0
B               1            1.0        0.0

我試過這個:

active_users = active_users.groupby(['col1', 'col2']).apply(lambda x: x.sort_values('col3')).transform('first')

並得到這個錯誤:

 TypeError: first() missing 1 required positional argument: 'offset'

您可以使用以下方法創建此類列:

df['col4'] = df.groupby(['col1', 'col2'])['col3'].transform('min')

由於排序項目的第一個值是最小值。 通常最好在排序列表的第一項上使用最小值,因為計算最小值可以在O(n)中完成。 對於排序,它取決於算法本身,因為有一些惰性排序算法有時也可以獲得O(n)中的第一個元素,但我認為'min'可以更清楚地說明你的目標是什么。

對於給定的樣本 dataframe,我們將獲得:

>>> df = pd.DataFrame({'col1': ['A']*5 + ['B']*4, 'col2': [0,0,0,1,1,0,0,1,1], 'col3': [2,1,3,3,4,3,1,0,1.0]})
>>> df
  col1  col2  col3
0    A     0   2.0
1    A     0   1.0
2    A     0   3.0
3    A     1   3.0
4    A     1   4.0
5    B     0   3.0
6    B     0   1.0
7    B     1   0.0
8    B     1   1.0
>>> df['col4'] = df.groupby(['col1', 'col2'])['col3'].transform('min')
>>> df
  col1  col2  col3  col4
0    A     0   2.0   1.0
1    A     0   1.0   1.0
2    A     0   3.0   1.0
3    A     1   3.0   3.0
4    A     1   4.0   3.0
5    B     0   3.0   1.0
6    B     0   1.0   1.0
7    B     1   0.0   0.0
8    B     1   1.0   0.0

暫無
暫無

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

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