按列表条目数过滤Pandas Dataframe,并按对子重新排列输出。

问题描述 投票:0回答:1

我正在处理一个类似下面格式的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']作为一个完整的字符串而不是一个列表,所以我有点卡住了。

python pandas pandas-groupby
1个回答
0
投票

我想你需要使用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
© www.soinside.com 2019 - 2024. All rights reserved.