只要其他列中的值匹配,就添加列值

Adding column values as long as a value in other column matches

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

例如来自以下列表:

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

我想获得以下结果:

Time      Value
10       (a+c+d)
20        (b+f)
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
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']}

如果您有数据框,这里有一个 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)

Returns:

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

您可以使用 groupby, then select the Value elements (so you don't sum the Times), then finally apply sum.

>>> 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