![](/img/trans.png)
[英]Create a new column and assign values to the first row by each group in Python 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.