具有这样的数据框:
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 ,可以逐月查看,从而实现循环,但是我想知道是否有任何方法比这更有效。
欢呼
答案 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
以避免不必要的行为。