提问者:小点点

如何传递第一列值列值在熊猫数据帧中有过滤器【重复】


这是我下面的数据框“df”按日期排序

item  price    date
  A    11.2   2021-12-31
  B    32.4   2021-12-31
  C    75.5   2021-12-31 
  A    89.3   2021-12-30
  B    12.2   2021-12-30 
  C    14.2   2021-12-30

基本上我只需要最后可用日期的数据

 item  price    date
  A    11.2   2021-12-31
  B    32.4   2021-12-31
  C    75.5   2021-12-31 

我尝试了下面的代码,它不符合预期的工作。我是熊猫新手,请帮助。

df = df.set_index(['date'])
df = df.loc[df['date'][0]]

共3个答案

匿名用户

您可以提取每个项目的最长日期的索引,然后选择它们:

idxs = df.groupby(['item'])['date'].transform(max) == df['date']
print(df[idxs])

匿名用户

不要忘记,您可以始终使用cript=df.to_dict()list=df. toList(),并使用您可能更有经验的cript或列表。

匿名用户

您可以根据项目和日期列对数据框进行排序(默认为升序顺序)并使用返回最后一行:

df.sort_values(['item','date']).groupby(['item']).tail(1)

  item  price       date
0    A   11.2 2021-12-31
1    B   32.4 2021-12-31
2    C   75.5 2021-12-31

pd.to_datetime部分将确保您的日期是datetime类型。所以本质上你需要:

df.assign(date = pd.to_datetime(df['date'])).sort_values(['item','date']).groupby(['item']).tail(1)