Python 按列表项的数量筛选数据帧,并按对重新排列输出
我正在使用一个csv文件,其格式如下所示,通过使用df.groupby来过滤公开共享链接的IDPython 按列表项的数量筛选数据帧,并按对重新排列输出,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我正在使用一个csv文件,其格式如下所示,通过使用df.groupby来过滤公开共享链接的ID url id bbc.com ['183','194','101'] cnn.com ['182', '193', '103'] google.com ['131'] 我现在尝试将其转换为一个新的csv,每次两个ID共享同一个链接时都会显示 因此,我的理想输出如下所示,特别是没有引号: source target 183, 194 183, 101 194,
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.compositions(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
我想您需要使用itertools.compositions(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
非常感谢你的帮助!这很有效。我意识到我最初遇到的问题是,它在退出代码为-9的情况下崩溃了。查找后,似乎表示系统内存不足。因此,我现在正在研究一种方法,将流程分为多个部分,因为这段代码在较小的数据集上运行良好。非常感谢您的帮助!这很有效。我意识到我最初遇到的问题是,它在退出代码为-9的情况下崩溃了。查找后,似乎表示系统内存不足。因此,我现在正在研究一种方法,将流程分割成块,因为这段代码可以在较小的数据集上正常工作。