![](/img/trans.png)
[英]Pandas Dataframe: groupby id to find max column value and return corresponding value of another column
[英]Pandas Dataframe - GroupBy key and keep max value on a another column
我需要按鍵對幀進行分組。 每個組可能有:
這是原始的dataframe:
df = pd.DataFrame({
'first': ['A', 'B', 'A1', 'B1', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K'],
'second': ['B', 'A', 'B1', 'A1', 'D', 'C', 'F', 'E', 'H', 'G', 'J', 'L'],
'key': ['AB', 'AB', 'AB', 'AB', 'CD', 'CD', 'EF', 'EF', 'GH', 'GH', 'IJ', 'KL'],
'max registered': [10, 5, 10, 5, 'NaN', 15, 10, 5, 'NaN', 'NaN', 'NaN', 15]
})
df
first second key max registered
0 A B AB 10
1 B A AB 5
2 A1 B1 AB 10
3 B1 A1 AB 5
4 C D CD NaN
5 D C CD 15
6 E F EF 10
7 F E EF 5
8 G H GH NaN
9 H G GH NaN
10 I J IJ NaN
11 K L KL 15
這是 dataframe 一旦被分組和(這是我的問題)聚合/過濾/轉換/應用后的樣子? 在對我的數據進行分組以及我應該選擇什么解決方案之后,我不知道該怎么做。
df = pd.DataFrame({
'first': ['A', 'A1', 'D', 'E', 'G', 'I', 'K'],
'second': ['B', 'B1', 'C', 'F', 'H', 'J', 'L'],
'key': ['AB', 'AB', 'CD', 'EF', 'GH', 'IJ', 'KL'],
'max registered': [10, 10, 15, 10, 'NaN', 'NaN', 15]
})
df
first second key max registered
0 A B AB 10
1 A1 B1 AB 10
2 D C CD 15
3 E F EF 10
4 G H GH NaN
5 I J IJ NaN
6 K L KL 15
自 2 天以來,我一直在看關於 groupby() 和 pandas 文檔的教程,但沒有找到任何關於其背后邏輯的線索以及我應該這樣做的方式。 我的問題(如我所見)更復雜,並且與那些教程中處理的內容無關(例如我看過幾次的這個)
從first
列和second
列創建有序組。 key
在這里沒用,因為您希望每個子組的所有最大值((A,B)的最大值和(A1,B1)的最大值)然后按降序max registered
對值進行排序。 最后按此虛擬組分組並保留第一個值(最大值):
out = df.assign(group=df[['first', 'second']].apply(frozenset, axis=1)) \
.sort_values('max registered', ascending=False) \
.groupby('group').head(1).sort_index()
print(out)
first second key max registered group
0 A B AB 10.0 (A, B)
2 A1 B1 AB 10.0 (B1, A1)
5 D C CD 15.0 (C, D)
6 E F EF 10.0 (E, F)
8 G H GH NaN (G, H)
10 I J IJ NaN (J, I)
11 K L KL 15.0 (K, L)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.