簡體   English   中英

從DataFrame中選擇屬於同一系列的行的最后一次觀察

[英]Select from a DataFrame the last observation from rows belonging to the same series

假設我在Python中有一個類似於這個的DataFrame:

df = pd.DataFrame.from_dict({
    '0': ['monday', 1],
    '1': ['monday', 5],
    '2': ['monday', 2],
    '3': ['tuesday', 1],
    '4': ['tuesday', 3]
}, orient='index', columns=['day', 'value'])

並且我想提取每個日期的最后一個觀察/元素,例如由值列定義,所以: df = df.sort_values(['day','value'])

如何在大型DataFrame上高效地完成這項工作? 一個極其緩慢的預期效果的例子是:

indices = []
for day in df['day'].unique():
    indices.append(list(df[df['day'] == day].index)[-1])

df.loc[np.array(indices)]

產量:

    day value
1   monday  5
4   tuesday 3

我知道這個答案: 從縱向數據中選擇最后一個觀察 ,但它在R中。

添加drop_duplicates並指定列day參數last ,如果必要,默認排序天數創建ordered categorical

df = pd.DataFrame.from_dict({
    '0': ['monday', 1, 4],
    '1': ['monday', 5, 1],
    '2': ['monday', 2, 0],
    '3': ['tuesday', 1, 2],
    '4': ['tuesday', 3, 3]
}, orient='index', columns=['day', 'value',  'value1'])
print (df)
       day  value  value1
0   monday      1       4
1   monday      5       1
2   monday      2       0
3  tuesday      1       2
4  tuesday      3       3

categories=['monday','tuesday','wednesday','thursday','friday','saturday', 'sunday']
df['day'] = pd.Categorical(df['day'], categories=categories, ordered=True)
df = df.sort_values(['day','value']).drop_duplicates('day', keep='last')
print (df)
       day  value  value1
1   monday      5       1
4  tuesday      3       3

試試這個,

print df.groupby('day',as_index=False)['value'].max()

輸出:

       day  value
0   monday      5
1  tuesday      3
df[df.groupby(['day'])['value'].transform(max) == df['value']]

輸出:

     day    value
1   Monday   5
4   Tuesday  3

暫無
暫無

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

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