如何将下面的数据框更改为df2?
等格式我在python
中有一堆用于networkx分析的原始数据现在处理数据帧就像df: 每个id是一个用户ID A B C D E是表示产品是否在该日期购买的二进制数据(1:已购买)
df
date id A B C D E
20170601 1001 1 1 0 0 0
1002 0 1 0 0 1
1003 0 1 1 1 1
1004 0 1 0 0 1
20170602 1001 1 0 1 0 1
1002 1 0 1 0 1
1003 0 1 0 0 1
1004 0 1 0 0 1
我想将数据处理成以下格式
df2
target1 target2 Weight
A B 1 (the time where A & B both = 1)
A C 2 (the time where A & C both = 1 )
A D 0
A E 2
B C 1
B D 1
B E 5
C D 1
C E 3
D E 1
我可以通过计算自己来创建这个数据框,但我有很多超过50的产品,只需要使用它来手动计算它需要花费很多时间:
df[(df.A == 1) & (df.B == 1)].sum()
和itertolls可能有帮助
list_product = list(itertools.combinations(df.columns,2))
dataframe = []
for i, i+1 in range(list_product):
count = df[(df[i] == 1) & (df[i+1] == 1)].sum()
dataframe.append(df.columns[i], df.columns[i+1], count)
这些是否以更快的方式创建此表? (可能有一些迭代方法......)
非常感谢您的帮助。
答案 0 :(得分:1)
您使用itertools发布的尝试非常接近:
export class AppComponent implements AfterViewInit {
state = 'in';
ngAfterViewInit() {
setTimeout(() => {
this.state = 'out';
}, 0);
}
onEnd(event) {
this.state = 'in';
if (event.toState === 'in') {
setTimeout(() => {
this.state = 'out';
}, 0);
}
}
}