检查列表单元格是否包含值

时间:2020-10-15 11:02:29

标签: pandas dataframe

具有这样的数据框:

  month  transactions_ids 
0     1         [0, 5, 1]        
1     2            [7, 4]    
2     3    [8, 10, 9, 11]     
3     6               [2]                  
4     9               [3]  

对于给定的 transaction_id ,我想获得月份请注意,transaction_id只能与一个月相关

例如,假设 transaction_id = 4 ,则为2。

我知道,如果相关的 transactions_ids 包含给定的 transaction_id ,可以逐月查看,从而实现循环,但是我想知道是否有任何方法比这更有效。

欢呼

2 个答案:

答案 0 :(得分:0)

您可以使用pandas字符串methods在“列表”中找到ID(使用{{1}进行读取时,它实际上只是一个与pandas有关的字符串) }):

StringIO

如果您的import pandas as pd from io import StringIO data = StringIO(""" month transactions_ids 1 [0,5,1] 2 [7,4] 3 [8,10,9,11] 6 [2] 9 [3] """) df = pd.read_csv(data, delim_whitespace=True) df.loc[df['transactions_ids'].str.contains('4'), 'month'] 是真实列表,则可以使用transactions_ids检查成员资格:

map

答案 1 :(得分:0)

我认为最好的方法是model.eval()您的数据框,并避免在单元格中包含python列表

explode

输出

df = df.explode('transaction_ids')

然后,简单地

   month transactions_ids
0      1                0
0      1                5
0      1                1
1      2                7
1      2                4
2      3                8
2      3               10
2      3                9
2      3               11
3      6                2
4      9                3

P.S:注意id_to_find = 1 # example df.loc[df.transactions_ids == id_to_find, 'month'] 输出的重复索引。通常,在大多数情况下最好进行explode以避免不必要的行为。