创建两行之和的新列,但每两行重复一次[重复]

Posted

技术标签:

【中文标题】创建两行之和的新列,但每两行重复一次[重复]【英文标题】:Create new column that is the sum of two rows, but repeat every two rows [duplicate] 【发布时间】:2020-11-10 20:39:20 【问题描述】:

我正在努力在数据框中构建一个附加列,该列是一个时间段内两行的总和。附上一张图片:

我想在每个 TimePeriodId 的“BillType”列中创建一个新列,即“IN”和“SA”的生命总和。这样,我将为单个 TimePeriodId 提供一个“总生命”条目。我浏览了很多文档,但不知道在这种情况下我该怎么做。

代码示例:

sa = pd.read_sql(sa_q1, sql_conn)

#convert TimePeriodId to string values

sa['TimePeriodId'] = sa['TimePeriodId'].astype(str)

sa = sa.loc[(sa['BillType'] =='SA') | (sa['BillType']=='IN')]#.drop(['BillType'], axis = 1)

sa.head(10).to_dict()

#the last line returns the following:

'TimePeriodId': 1: '201811',
  2: '201811',
  4: '201812',
  5: '201812',
  9: '201901',
  11: '201901',
  13: '201902',
  14: '201902',
  17: '201903',
  18: '201903',
 'BillType': 1: 'IN',
  2: 'SA',
  4: 'IN',
  5: 'SA',
  9: 'SA',
  11: 'IN',
  13: 'IN',
  14: 'SA',
  17: 'IN',
  18: 'SA',
 'Lives': 1: 1067,
  2: 288028,
  4: 1058,
  5: 287501,
  9: 293560,
  11: 1068,
  13: 1089,
  14: 278850,
  17: 1076,
  18: 276961

任何帮助将不胜感激!

【问题讨论】:

请在问题中包含输入作为文本。另外,请包括预期的输出。 如果您将数据作为可复制文本而不是图像提供,我可能会尝试发布答案... 抱歉,我是 python 新手,不确定您所说的“输入为文本”是什么意思? @KeithRoberts 将df.to_dict() 发布到问题中,如果df 是大帖子df.head(10).to_dict() 和预期输出。这使得在本地复制您的数据变得容易。 【参考方案1】:

您可以尝试使用pandas.DataFrame.groupby() 方法计算每个时间段的生命总和。之后,您可以使用pandas.DataFrame.transform() 方法通过计算列丰富sa 数据帧。

>>> sa['LivesTotal'] = sa.groupby('TimePeriodId').Lives.transform('sum')

【讨论】:

这很好,但我最终得到了重复。我使用 .drop_duplicates() 并获取 nan 值。这对我来说没问题,只要我可以从不包含 nan 值的 df 构建图表 @JaroslavBezděk - 嗯,如果不是骗子,可以要求接受,对于骗子最好的答案...... 抱歉,没有注意到。

以上是关于创建两行之和的新列,但每两行重复一次[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何找到numpy数组的每两行的平均值

从表的两行到视图中的值总和[重复]

两行或多行显示flex [重复]

如何从命令行将每两行合并为一行?

如何将文本文件的每两行与 Bash 配对? [复制]

Python - 基于其他列条件的新列[重复]