pandas数据帧中给定索引的数据输入总和

时间:2018-04-03 16:06:55

标签: pandas dataframe sum combinations itertools

我尝试在pandas数据帧中获得给定数据的可能组合的总和。为此,我使用itertools组合来获得所有可能的组合,然后通过使用循环,我对它们进行求和。

有没有办法在不使用循环的情况下执行此操作?

请检查我创建的以下脚本以显示我想要的内容。

import pandas as pd
import itertools as it

A = pd.Series([50, 20, 75], index = list(range(1, 4)))

df = pd.DataFrame({'A': A})

listNew = []
for i in range(1, len(df.A)+1):
    Temp=it.combinations(df.index.values, i)
    for data in Temp:
        listNew.append(data)  

print(listNew)

for data in listNew:
    print(df.A[list(data)].sum()) 

这些脚本的输出是:

[(1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]
50
20
75
70
125
95
145

提前谢谢。

1 个答案:

答案 0 :(得分:3)

IIUC,使用reindex

#convert you list of tuple to data frame and using stack to flatten it 
s=pd.DataFrame([(1,), (2,), (3,), (1, 2),(1, 3),(2, 3), (1, 2, 3)]).stack().to_frame('index') 

# then we reindex base on the order of it using df.A
s['Value']=df.reindex(s['index']).A.values

#you can using groupby here, but since the index is here, I will recommend sum with level 
s=s.Value.sum(level=0)
s
Out[796]: 
0     50
1     20
2     75
3     70
4    125
5     95
6    145
Name: Value, dtype: int64