Я нашел способ, используя join
:
In [101]:
aggregated = df.groupby('A').sum()['values']
aggregated.name = 'sum_values_A'
df.join(aggregated,on='A')
Out[101]:
A B values sum_values_A
0 1 1 10 25
1 1 2 15 25
2 2 1 20 45
3 2 2 25 45
У кого-то есть более простой способ сделать это?
Идея заключается в преобразовании имен столбцов date
в DatetimeIndex
и split
из .
в MultiIndex
:
dfs = []
for subdirname in glob.iglob('C:/Users/stacey/WorkDocs/tradeopt/'+filename+'//BBG*/tradeopt.is-pnl*.lzma', recursive=True):
out = []
with lzma.open(subdirname, mode='rt') as file:
print(subdirname)
for line in file:
items = line.strip().split(",")
out.append(items)
if len(out) > 0:
a = pd.DataFrame(out[1:], columns=out[0]).set_index('date')
a.index = pd.to_datetime(a.index)
dfs.append(a)
, а затем используйте concat
и sum
по именам столбцов:
df = pd.concat(dfs, axis=1).sum(level=0, axis=1)