【问题标题】:Python sum two columns based on array keyPython根据数组键对两列求和
【发布时间】:2018-07-25 14:07:07
【问题描述】:

我有以下几点:

Type RT LT NAID RecordTime "T" "15" "123" "NZ45" "2018-05-30 16:59:00" "S" "34" "210" "NZ45" "2018-05-30 16:59:00" "T" "56" "480" "NZ45" "2018-05-30 16:59:00" "T" "90" "480" "CR98" "2018-05-30 16:59:00" "S" "80" "180" "RU992" "2018-05-30 16:58:00"

我需要根据类型列和 NAID 对 RT 和 LT 值求和,如下所示,对相同类型和 NAID 的值求和。

Type RT LT NAID RecordTime "T" "71" "603" "NZ45" "2018-05-30 16:59:00" "S" "34" "210" "NZ45" "2018-05-30 16:59:00" "T" "90" "480" "CR98" "2018-05-30 16:59:00" "S" "80" "180" "RU992" "2018-05-30 16:58:00"

你能帮帮我吗?

【问题讨论】:

  • “列”是什么意思?一个列表、一个 csv 文件、一个 pandas 数据框?你尝试了什么,为什么失败了?
  • 在决定添加哪些行时是否要忽略 RecordTime 列? IE。该列是否(部分)决定是否要添加两行?如果不是,如果该列在两行之间不同,应该保留哪个值?
  • @JohnRodriguez 不要在评论中发布代码。您无法正确格式化它。请改为编辑您的问题。
  • 我只需要将 NAID 相同的 RT 和 LT 值相加即可。

标签: python


【解决方案1】:

我相信您的数据来自数据库,但我已将其放入列表列表中以模拟效果。

rows = [["T","15","123","NZ45","2018-05-30 16:59:00"],
["S","34","210","NZ45","2018-05-30 16:59:00"],
["T","56","480","NZ45","2018-05-30 16:59:00"],
["T","90","480","CR98","2018-05-30 16:59:00"],
["S","80","180","RU992","2018-05-30 16:58:00"]]

rslts = {}
for Type,RT,LT,NAID,RecT in rows:
    # create a unique key for each combination of NAID, Type, and RecT
    key = "_".join([NAID, Type, RecT])

    if key in rslts:
         # we have seen this combination before: add LT and RT to the existing LT and RT
         rslts[key]["RT"] += int(RT)
         rslts[key]["LT"] += int(LT)  
    else:
        # if we haven't seen this combination before, add the record under the unique key
        rslts[key] = { "NAID": NAID, "RecT": RecT, "Type": Type, "RT": int(RT), "LT": int(LT) }

# print out the data
print( "\t".join( ['Type','RT','LT','NAID','RecT'] ) )
for k in rslts:
    print( "\t".join( map(lambda x: str(rslts[k][x]), ['Type','RT','LT','NAID','RecT'] ) ) )

输出:

Type    RT  LT  NAID    RecT
T       71  603 NZ45    2018-05-30 16:59:00
S       34  210 NZ45    2018-05-30 16:59:00
T       90  480 CR98    2018-05-30 16:59:00
S       80  180 RU992   2018-05-30 16:58:00

请注意,我必须将 LT 和 RT 转换为整数来执行加法,并转换为字符串来打印它们。如果 LT 和 RT 作为整数从您的数据库中出来,您可能不需要执行该步骤。

【讨论】:

  • 天才。谢谢先生,我惊动了外星人
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2018-11-28
  • 1970-01-01
  • 2022-12-15
  • 2020-08-19
相关资源
最近更新 更多