簡體   English   中英

根據 Python 中的另一列篩選列列表

[英]Filter column list based on another column in Python

在 Python 中,我有一個如下所示的數據集,其中column1column2是對象而不是字符串:

data = {'id':  ['first_value', 'first_value', 'second_value', 'third_value'],
    'column1': [a0, a0 a1, a2, a87],
    'column2': [a0=4, a0=2;a1=8;a7=9, a2=0, a33=9]
    }
    

我想在“ column2 ”上保留以下值:

一種。 也在'column1'中。
b. 'column2'上的“=”符號后大於零的值(因此,例如, 'a2=0'將從結果中刪除,因為它為零(...=0) ,而a1=8將留下來因為它是 8 (...=8) )

因此在這種情況下我的結果是:

data = {'id':  ['first_value', 'first_value'],
        'column1': ['aO', 'a0;a1'],
        'column2': ['a0=4', 'a0=2;a1=8']
        }

我怎樣才能做到這一點?

您可以嘗試在行上apply

def filter_column(row):
    keys = row['column1'].split(' ')
    dicts = dict([kv.split('=') for kv in row['column2'].split(';')])
    lists = [f'{k}={v}' for k, v in dicts.items()
             if k in keys and int(v) > 0]
    return ';'.join(lists)

df['column3'] = df.apply(filter_column, axis=1)
print(df)

             id column1         column2    column3
0   first_value      a0            a0=4       a0=4
1   first_value   a0 a1  a0=2;a1=8;a7=9  a0=2;a1=8
2  second_value      a2            a2=0
3   third_value     a87           a33=9

------------

print(df[df['column3'].ne('')])

            id column1         column2    column3
0  first_value      a0            a0=4       a0=4
1  first_value   a0 a1  a0=2;a1=8;a7=9  a0=2;a1=8

對於您的問題,使用循環似乎更容易。 column1值創建集合,從column2值創建字典; 然后使用zip遍歷兩者並識別公共鍵並查看這些鍵下的值是否為零:

out = []
for col1, col2 in zip(({*x.split(';')} for x in df['column1']), 
                      (dict([kv.split('=') for kv in x.split(';')]) for x in df['column2'])):
    inner = []
    s = col2.keys() & col1
    while s:
        k = s.pop()
        if col2[k] != '0':
            inner.append(f"{k}={col2[k]}")
    out.append(';'.join(inner))
df['column2'] = out
out = df[df['column2']!='']

Output:

            id column1    column2
0  first_value      a0       a0=4
1  first_value   a0;a1  a0=2;a1=8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM