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)
,以避免不必要的行为