只要另一列中的值相同,如何添加列值?
例如从以下列表中:
Time Value
10 a
20 b
10 c
10 d
20 f
我想获得以下结果:
Time Value
10 (a+c+d)
20 (b+f)
只要另一列中的值相同,如何添加列值?
例如从以下列表中:
Time Value
10 a
20 b
10 c
10 d
20 f
我想获得以下结果:
Time Value
10 (a+c+d)
20 (b+f)
如果您有数据框,这是一个熊猫解决方案:
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)
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']}
你可以使用groupby
, 然后选择元素(所以Value
你不要),然后 finally 。sum
Times
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