У меня есть dataframe, который выглядит так:
from random import randint
import pandas as pd
df = pd.DataFrame({"ID": ["a", "b", "c", "d", "e", "f", "g"],
"Size": [randint(0,9) for i in range(0,7)]})
df
ID Size
0 a 4
1 b 3
2 c 0
3 d 2
4 e 9
5 f 5
6 g 3
И то, что я хотел бы получить, это (может быть, и матрица):
sums_df
a b c d e f g
a 8.0 7.0 4.0 6.0 13.0 9.0 7.0
b 7.0 6.0 3.0 5.0 12.0 8.0 6.0
c 4.0 3.0 0.0 2.0 9.0 5.0 3.0
d 6.0 5.0 2.0 4.0 11.0 7.0 5.0
e 13.0 12.0 9.0 11.0 18.0 14.0 12.0
f 9.0 8.0 5.0 7.0 14.0 10.0 8.0
g 7.0 6.0 3.0 5.0 12.0 8.0 6.0
То есть сумма значений Size
для всех возможных пар в ID
.
На данный момент у меня есть этот простой, но неэффективный код:
sums_df = pd.DataFrame()
for i in range(len(df)):
for j in range(len(df)):
sums_df.loc[i,j] = df.Size[i] + df.Size[j]
sums_df.index = list(df.ID)
sums_df.columns = list(df.ID)
Он отлично подходит для небольших примеров, подобных этому, но для моих фактических данных он слишком длинный, и я уверен, что можно избежать вложенных циклов for
. Можете ли вы придумать лучший способ сделать это?
Спасибо за любую помощь!