【问题标题】:How to extract certain data using groupby and use the extracted data to make a new column?如何使用 groupby 提取某些数据并使用提取的数据创建新列?
【发布时间】:2020-04-17 20:22:38
【问题描述】:

所以我有电影名称、日期、累积收入的数据集。同一部电影有多行,并且有一列显示累计收入。我想提取某部电影的最后累积收入并创建一个新列并将提取的值插入某部电影的第一行。 例如,我想知道如何提取电影'a'的最后收入,电影'b'的最后收入......并将这些值插入每部电影的新列的第一行。所以在图片中,电影 a 为 D2,电影 b 为 D33,依此类推......

df['Date'] = pd.to_datetime(df['Date']) df = df.sort_values('Date') df.groupby('Movie name')['Revenue accumulated'].last()

【问题讨论】:

  • 那么,如果您希望此列包含第一行的条目,那么该电影的其他行应该包含什么?
  • 我希望它们只是空格

标签: python pandas numpy data-manipulation data-cleaning


【解决方案1】:

您可以执行以下操作。但我建议将它们替换为 np.nan(即不是空白),因为这应该是最后的数字列。

def get_last_as_first(grp):
  return  pd.Series([grp.iloc[-1]] + [np.nan]*(grp.shape[0]-1))

df['Date'] = pd.to_datetime(df['Date']) 
df = df.sort_values('Date')
new_col = df.groupby('Movie name')['Revenue accumulated'].transform(get_last_as_first)

【讨论】:

  • 这工作正常,但改变了电影的原始顺序。我怎样才能做同样的工作,但保持原来的电影??
  • @Poryuijax 当你说电影的顺序发生了变化时,你能详细说明你的意思吗?它应该与您传递数据的顺序相同(因为您的电影列已排序)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
相关资源
最近更新 更多