Если у меня есть такая таблица
|---------------------|------------------|
| time | list of string |
|---------------------|------------------|
| 2019-06-18 09:05:00 | ['A', 'B', 'C']|
|---------------------|------------------|
| 2019-06-19 09:05:00 | ['A', 'C'] |
|---------------------|------------------|
| 2019-06-19 09:05:00 | ['B', 'C'] |
|---------------------|------------------|
| 2019-06-20 09:05:00 | ['C'] |
|---------------------|------------------|
| 2019-06-20 09:05:00 | ['A', 'B', 'C']|
|---------------------|------------------|
Для каждой строки я хотел бы знать, сколько строк до текущей временной метки имеют хотя бы одно общее значение в текущем списке строк.
Медленный код будет выглядеть примерно так:
results = [] for i in range(len(df)):
current_t = df['time'].iloc[i]
current_string = df['list_of_string'].iloc[i]
df_before_t = df[df['time']<current_t]
cumm_count = 0
for row in df_before_t['list_of_string']:
if (set(current_string) & set(row)):
cumm_count += 1
results.append(cumm_count)
Таким образом, таблица результатов будет иметь вид:
|---------------------|------------------|---------------------|
| time | list of string | result |
|---------------------|------------------|---------------------|
| 2019-06-18 09:05:00 | ['A', 'B', 'C']| 0 |
|---------------------|------------------|---------------------|
| 2019-06-19 09:05:00 | ['A', 'C'] | 1 |
|---------------------|------------------|---------------------|
| 2019-06-19 09:05:00 | ['D'] | 0 |
|---------------------|------------------|---------------------|
| 2019-06-20 09:05:00 | ['C'] | 2 |
|---------------------|------------------|---------------------|
| 2019-06-20 09:05:00 | ['A', 'B', 'C']| 2 |
|---------------------|------------------|---------------------|
Набор данных, который у меня сейчас есть, относительно большой, и я быхотел бы получить помощь для быстрой обработки этих данных. Большое спасибо!