我正在处理一个类似下面格式的csv文件,它是通过使用df.groupby来过滤哪些ids公开分享了哪些链接。
url id
bbc.com ['183','194','101']
cnn.com ['182', '193', '103']
google.com ['131']
我现在想把它变成一个新的csv文件,显示每次两个id共享同一个链接的情况。
所以我理想的输出是这样的,特别是没有引号。
source target
183, 194
183, 101
194, 101
182, 193
182, 103
103, 193
我真的很感激任何帮助!
我试过用df.drop删除包含少一个条目的行,但它将整个条目作为一个字符串来读取,即['183, '194', '101']作为一个完整的字符串而不是一个列表,所以我有点卡住了。
我想你需要使用itertools.combinations(x, k)。 这里是例子。
import pandas as pd
import numpy as np
import itertools
df = pd.DataFrame({ 'url': ['bbc.com', 'cnn.com', 'google.com'],
'id' : [['183','194','101'], ['182', '193', '103'], ['131'] ]})
df
url id
0 bbc.com [183, 194, 101]
1 cnn.com [182, 193, 103]
2 google.com [131]
这里是产生输出的循环。
k =2
for x in df['id'].values:
for a, b in itertools.combinations(x, k):
print(a, b)
输出:
183 194
183 101
194 101
182 193
182 103
193 103