尝试显示分组数据的第一个实例时合并的行

时间:2019-05-02 02:09:48

标签: pandas dataframe pandas-groupby

我试图按组显示第一行(在这种情况下,Car是组)。但是,当我尝试使用下面的数据执行此操作时,我的代码显示Fred的时间为45(实际上是下一行中Betsy的时间)。我希望输出显示汽车A的第一个完整行和汽车B的第一个完整行,即使它们在时间列中包含np.nan。

有人可以帮助我了解我在做什么,为什么我的代码会像这样合并行信息?

谢谢!

import pandas as pd

test_df = pd.DataFrame({'Race':[1,1,1,2,2,2],'Car':['A','A','A','B','B','B'], 'Date':['5/1/2019','4/15/2019','3/1/2019','5/1/2019','2/1/2019','1/5/2019'],
                        'Driver':['Fred','Betsy','John','John','Frank','Frank'],'Time':[np.nan,45,46,47,44,43]})

test_df = test_df.sort_values(['Race', 'Car', 'Date'], ascending=[True, True, False]).groupby(['Car'], as_index=False).first()

2 个答案:

答案 0 :(得分:0)

使用.head(1)代替.first()

输出:

   Race Car      Date Driver  Time
0     1   A  5/1/2019   Fred   NaN
3     2   B  5/1/2019   John  47.0

两者之间的区别在于如何处理NaN:link

答案 1 :(得分:0)

使用nth(0,dropna = False)代替first()

test_df = test_df.sort_values(['Race', 'Car', 'Date'], ascending=[True, True, False]).groupby(['Car'], as_index=False,).nth(0,dropna=False)

输出

    Race Car   Date    Driver   Time
0    1   A   5/1/2019  Fred     NaN
3    2   B   5/1/2019  John    47.0