iT邦幫忙

0

Pandas如何合併去重之外同時判斷被去除的欄位大小?

想問一下Pandas在處理去重合併的同時, 有沒有辦法依據某個欄位的值來決定留哪筆資料?

例如:

   name video_name second
0  john      1.mp4     55
1  john      1.mp4     88
2  jonh      2.mp4     13
3  kate      1.mp4     33

我想要合併john在同一個影片底下並只留下最大second的那筆資料

等於name跟video_name做合併, 並依據second大小來決定去重的單一資料.

結果如下:

   name video_name second
0  john      1.mp4     88
1  jonh      2.mp4     13
2  kate      1.mp4     33

有辦法做到嗎?還是說有什麼關鍵字方向可以去研究

謝謝各位

1 個回答

1
listennn08
iT邦研究生 2 級 ‧ 2019-12-16 10:57:09
最佳解答
import pandas as pd

df = pd.DataFrame([["john", "1.mp4", 55], ["john", "1.mp4", 88], ["jonh", "2.mp4", 13], ["kate", "1.mp4", 33]], columns=["name", "video_name", "second"])
df = df.groupby(["name", "video_name"],as_index=False).max()
print(df)

output:

   name video_name  second
0  john      1.mp4      88
1  jonh      2.mp4      13
2  kate      1.mp4      33

請教一下如果有其他欄位的話.max() 還適用嗎

   name video_name  second age
0  john      1.mp4      88  23
1  jonh      2.mp4      13  33
2  kate      1.mp4      33  12
listennn08 iT邦研究生 2 級 ‧ 2019-12-16 11:41:25 檢舉

適用 不過排列就會是

name video_name age second

因為是用其他欄位做 group 去比較最大值

寫這樣應該比較容易懂

df = df.groupby(["name", "video_name"], as_index=False)["second"].max()

你要再加 age 就是

df = df.groupby(["name", "video_name", "age"], as_index=False)["second"].max()

我要發表回答

立即登入回答