У меня есть датафрейм в Python, в котором перечислены группы твитов с их идентификатором, созданным временем и идентификатором твита, с которым каждый из них взаимодействовал. Например, от 006
до 004
, 002
указано 999
(999
- это старый твит, который здесь не указан). Таблица отсортирована по времени создания.
+----------+---------------------+-------------+--------------+-----------+
| tweet_id | created_at | reply_to_id | retweeted_id | quoted_id |
+----------+---------------------+-------------+--------------+-----------+
| 001 | 2020-02-24 15:51:17 | nan | 000 | nan |
| 002 | 2020-02-24 15:52:17 | nan | nan | nan |
| 003 | 2020-02-24 15:53:17 | nan | nan | 999 |
| 004 | 2020-02-24 15:54:17 | 001 | nan | nan |
| 005 | 2020-02-24 15:55:17 | nan | nan | nan |
| 006 | 2020-02-24 15:56:17 | nan | 004 | 003 |
| 007 | 2020-02-24 15:57:17 | nan | nan | 003 |
| 008 | 2020-02-24 15:58:17 | nan | nan | 006 |
| 009 | 2020-02-24 15:59:17 | 006 | nan | nan |
| 010 | 2020-02-24 16:00:17 | nan | 008 | nan |
+----------+---------------------+-------------+--------------+-----------+
Я пытаюсь написать функцию для поиска истории взаимодействия одного твита. например, 010
ретвитнул 008
, 008
цитировал 006
, 006
ретвитнул 004
, а также цитировал 003
, 004
ответил на 001
, 003
цитировал 999
. Я хотел бы, чтобы эта функция возвращала список твитов, которые отслеживают историю 010
.
Другими словами, я хотел бы:
input: '010'
output: ['008', '006', '004', '003', '001', '999']
код для генерации этого игрушечного кадра данных :
df = pd.DataFrame(np.array(
[['001','2020-02-24 15:51:17',np.nan,'000',np.nan],
['002','2020-02-24 15:52:17',np.nan,np.nan,np.nan],
['003','2020-02-24 15:53:17',np.nan,np.nan,'999'],
['004','2020-02-24 15:54:17',np.nan,np.nan,np.nan],
['005','2020-02-24 15:55:17',np.nan,np.nan,np.nan],
['006','2020-02-24 15:56:17',np.nan,'004',np.nan],
['007','2020-02-24 15:57:17',np.nan,np.nan,'003'],
['008','2020-02-24 15:58:17',np.nan,np.nan,'006'],
['009','2020-02-24 15:59:17','006',np.nan,np.nan],
['010','2020-02-24 16:00:17',np.nan,'008',np.nan]]),
columns = ['tweet_id', 'created_at', 'reply_to_id', 'retweeted_id', 'quoted_id'])
Полагаю, это может потребовать рекурсивного поиска? Я мог справиться только тогда, когда есть только один тип взаимодействия (если твиты могут отвечать только друг другу. Не уверен, как обращаться, когда 006
взаимодействовал с двумя твитами, и это как бы создает две ветви. Надеюсь получить некоторую помощь от вас ребята!