【问题标题】:Adding column values as long as a value in other column matches只要其他列中的值匹配,就添加列值
【发布时间】:2018-01-01 18:21:18
【问题描述】:

如果另一列中的值相同,如何添加列值?

例如从以下列表中:

Time   Value
10       a
20       b
10       c
10       d
20       f

我想得到如下结果:

Time      Value
10       (a+c+d)
20        (b+f)

【问题讨论】:

  • 欢迎来到 StackOverflow!请看How to ask a good question
  • 这是dataframe吗?
  • 这到底是什么?你的数据在 python 中是什么样子的?
  • Joe Iddon , Anton vBR 正在从文本文件导入。我有 7 列字符串数据,我需要 5 列根据时间发生进行汇总。

标签: python python-2.7 summarize


【解决方案1】:

如果您有数据框,这里是一个 pandas 解决方案:

import pandas as pd

data ='''\
Time   Value
10       a
20       b
10       c
10       d
20       f'''

df = pd.read_csv(pd.compat.StringIO(data), sep='\s+')

newdf = df.groupby('Time')['Value']\
        .apply(lambda x: '({})'.format('+'.join(x)))\
        .reset_index()

print(newdf)

返回:

   Time    Value
0    10  (a+c+d)
1    20    (b+f)

【讨论】:

  • 我需要 a,c 和 d 的总和而不是串联
  • @MusaNdiaye 在这种情况下是newdf = df.groupby('Time')['Value'].apply(sum).reset_index()。然而,这闻起来像个骗子,一个非常基本的操作。乔伊登也有答案。
【解决方案2】:

你可以使用groupby,然后选择Value元素(这样你就不用sumTimes),最后是applysum

>>> d = {'Time': [10,20,10,10,20], 'Value': ['a', 'b', 'c', 'd', 'f']}
>>> df = pd.DataFrame(d)
>>> df
   Time Value
0    10     a
1    20     b
2    10     c
3    10     d
4    20     f
>>> df.groupby(['Time'])['Value'].apply(sum).reset_index()
   Time Value
0    10   acd
1    20    bf

【讨论】:

    【解决方案3】:
    from collections import defaultdict
    
    dd = defaultdict(list)
    L = [10, 'a', 20, 'b', 10, 'c', 10, 'd', 20, 'f']
    x = 0
    while x < len(L):
      dd[L[x]].append(L[x+1]);
      x = x+ 2
    
    for key, val in dd.iteritems():
      print key, reduce(lambda a, b: a+b, val)
    
    print dd
    

    【讨论】:

    • 什么是 L ?我们在真正的程序中从来没有这样的事情
    【解决方案4】:
    data = {
        'a': 10,
        'b': 20,
        'c': 10,
        'd': 10,
        'f': 20
    }
    
    v = {}
    
    for key, value in sorted(data.iteritems()):
        v.setdefault(value, []).append(key)
    
    print v
    

    结果:

    {10: ['a', 'c', 'd'], 20: ['b', 'f']}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2022-12-17
      相关资源
      最近更新 更多