我正在使用 Pandas 并且有一個帶有日期列、唯一 ID 列和十幾個帶有數值的列的資料框。以下作為一個可重復的例子作業得很好:
df = pd.DataFrame(data = {
'day': ['2020-10-01', '2020-10-01', '2020-10-01', '2020-10-01', '2020-10-01', '2020-10-01',
'2020-10-02', '2020-10-02', '2020-10-02', '2020-10-02', '2020-10-02'],
'distinct_id': ['a', 'a', 'a', 'b', 'b', 'c', 'a', 'a', 'b', 'c', 'c'],
'value': [71, 72, 73, 74, 74, 73, 72, 71, 71, 72, 73]
})
我只想按day和按分組distinct_id,而忽略所有其他列。我只需要知道在給定的情況下day,給定的distinct_id觸發了一個事件。
# Desired output
day distinct_id
0 2020-10-01 a
1 2020-10-01 b
2 2020-10-01 c
3 2020-10-02 a
4 2020-10-02 b
5 2020-10-02 c
如果這是 SQL,我會寫一些類似于:
SELECT DISTINCT day, distinct_id FROM df
在 Pandas 中,我不知道該怎么做。以下是我認為我想要的 groupby物件:
df.groupby(['day', 'distinct_id'])
# Output: <pandas.core.groupby.generic.DataFrameGroupBy object at 0x7ffd71bbd430>
但是,我能找到的關于如何將其轉換為資料幀的所有示例都涉及某種數字聚合。我理論上可以這樣做,然后洗掉結果列,就像這樣......
df2 = df.groupby(['day', 'distinct_id']).count().reset_index()
# My actual example has a dozen or so columns to drop
cols = ['day', 'distinct_id']
df2.drop([x for x in df.columns if not x in cols], axis = 1)
...但這感覺像是一種解決方法。有沒有更直接的方法來實作這一目標?
uj5u.com熱心網友回復:
我們可以選擇這些列,然后drop_duplicates.
df = pd.DataFrame(data = {
'day': ['2020-10-01', '2020-10-01', '2020-10-01', '2020-10-01', '2020-10-01', '2020-10-01',
'2020-10-02', '2020-10-02', '2020-10-02', '2020-10-02', '2020-10-02'],
'distinct_id': ['a', 'a', 'a', 'b', 'b', 'c', 'a', 'a', 'b', 'c', 'c'],
'value': [71, 72, 73, 74, 74, 73, 72, 71, 71, 72, 73]
})
df[['day', 'distinct_id']].drop_duplicates()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325875.html
標籤:Python 熊猫 数据框 pandas-groupby
