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

Pandas 检查列表单元格是否包含值,pandas,dataframe,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] 对于给定的事务_id,我希望获得发生的月份请注意,事务id只能与一个月相关 df = df.

具有如下数据帧:

  month  transactions_ids 
0     1         [0, 5, 1]        
1     2            [7, 4]    
2     3    [8, 10, 9, 11]     
3     6               [2]                  
4     9               [3]  
对于给定的事务_id,我希望获得发生的月份请注意,事务id只能与一个月相关

df = df.explode('transaction_ids')
因此,例如,给定事务\u id=4月份将为2

我知道,如果相关的事务id包含给定的事务id,则可以通过逐月查看循环来实现这一点,但我想知道是否有比这更有效的方法


干杯

您可以使用
pandas
字符串在“列表”中查找id(使用
StringIO
读入时,就
pandas
而言,它实际上只是一个字符串):

如果您的
transactions\u id
是真实的列表,那么您可以使用
map
检查成员资格:

df['transactions_ids'].map(lambda x: 3 in x)

您可以使用
pandas
string在“列表”中查找id(使用
StringIO
读入时,就
pandas
而言,它实际上只是一个字符串):

如果您的
transactions\u id
是真实的列表,那么您可以使用
map
检查成员资格:

df['transactions_ids'].map(lambda x: 3 in x)

在我看来,最好的方法是
分解数据帧
,并避免在单元格中包含python列表

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
然后,简单地说

id_to_find = 1 # example
df.loc[df.transactions_ids == id_to_find, 'month']


注意:注意
爆炸输出的重复索引。一般来说,最好进行
分解(…)。在大多数情况下重置索引(drop=True)
,以避免不必要的行为。

我认为最好的方法是
分解数据帧,并避免单元格中有python列表

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
然后,简单地说

id_to_find = 1 # example
df.loc[df.transactions_ids == id_to_find, 'month']

注意:注意
爆炸输出的重复索引。一般来说,最好执行分解(…)。在大多数情况下重置索引(drop=True)
,以避免不必要的行为