所以我有一个数据集,有两列,一列是带产品名称的字符串变量,另一列是区间值。
Affiliate_ID Average "A" Level
store X 7.0
store Y 4.3
store Z 5.6
我很好奇在python中是否可以计算并求和所有可能的成对差异,而不需要重复。
Sum = |7.0 - 4.3| + |4.3 - 5.6| + |7.0 - 5.6|
我不知道什么格式最适合python进行这样的操作,但我有csv文件和excel文件中的数据。我使用panda将数据放入数据帧中。我尝试过的一件事是从数据帧中获取一个特定的列
df = pd.DataFrame.from_csv(infile_path + "mp_viewed_item_AGG_affiliate_item_TOP_10.csv", sep=',')
i = 0
for i in df:
x = df[i]
但这感觉是不正确的——好像它没有任何进展(我不知道!)
有人建议我使用一种名为itertools的东西,并为我提供了一个示例
sum([args[i] - args[j] for i,j in itertools.permutations(range(len(args)
但我真的不知道该怎么做。
如果有人能让我对我的问题有所了解,我将不胜感激。我是蟒蛇的新手;我知道基础知识,写过几个非常简单的程序,但我根本不是一个开发人员。
import itertools
column = [3, 1, 7, 2, 9, 4]
你可以制作一组像这样的
# You can use set() instead of list() if you want to remove duplicates
list(itertools.combinations(column,2))
输出
[(3, 1), (3, 7), (3, 2), (3, 9), (3, 4),
(1, 7), (1, 2), (1, 9), (1, 4),
(7, 2), (7, 9), (7, 4),
(2, 9), (2, 4),
(9, 4)]
然后你可以使用列表理解获得差异的总和
sum([abs(pair[1] - pair[0]) for pair in itertools.combinations(column,2)])
输出
56
像这样使用itertools.combinations
。
import pandas as pd
import itertools
d = {'Affiliate_ID': pd.Series(['store X', 'store Y', 'store Z']), 'Average "A" Level': pd.Series([7.0, 4.3, 5.6])}
df = pd.DataFrame(d)
print sum(abs(x - y) for x, y in itertools.combinations(df['Average "A" Level'], 2))