簡體   English   中英

熊貓-通過基於兩列的ID鏈接多行將消息分組為對話

[英]Pandas - grouping messages as conversations by linking multiple rows based on ids from two columns

我有一些數據可根據source_id和response_id跟蹤推文和響應。 source_id可以與原始帖子或具有自己響應的響應關聯。 如果存在多個響應,則每個響應將具有一個source_id,並且該source_id將出現在相應響應的response_id中。

以這個數據框為例:

df = pd.DataFrame({
'date': ['2018-10-02', '2018-10-03', '2018-10-03', '2018-10-03', '2018-10-03', '2018-10-03', '2018-10-03', '2018-10-03', '2018-10-03'],
'id': ['334', '335', '336', '337', '338', '340', '341', '343', '358'],
'source_id': ['830', '636', '657', '569', '152', '975', '984', '720', '524'],
'reply_id': [np.nan, '495', '636', '657', '569', '830', '152', np.nan, np.nan]
})

及其輸出:

         date   id source_id reply_id
0  2018-10-02  334       830      NaN
1  2018-10-03  335       636      495
2  2018-10-03  336       657      636
3  2018-10-03  337       569      657
4  2018-10-03  338       152      569
5  2018-10-03  340       975      830
6  2018-10-03  341       984      152
7  2018-10-03  343       720      NaN
8  2018-10-03  358       524      NaN

每行包含一條消息的數據。 無論是推文還是對推文的響應,消息都有唯一的ID。 在此示例中,有兩個“對話”,一個或多個對原始帖子的回復,以及兩個獨立的推文,沒有回復。 沒有響應的推文是df.iloc[7]df.iloc[8] ,這兩個推文在reply_id中都具有NaN,並且它們的source_id不出現在任何其他行的reply_id中。 盡管df.iloc[0]包含NaN,但其source_id出現在df.iloc[5]的reply_id中。 因此,這將被視為一次對話。

我真正要解決的問題是如何將一系列tweet /響應(例如df.iloc[1]df.iloc[2]df.iloc[3]df.iloc[4]df.iloc[6] df.iloc[4] df.iloc[6]並將其全部計為一次對話。 對於此特定對話,原始帖子沒有可用數據,因此沒有source_id = 495的行。

有人對如何解決這個問題有任何想法嗎?

據我了解,這更像是網絡問題,因此我們使用networkx

import networkx as nx 
G=nx.from_pandas_edgelist(df.dropna(), 'reply_id', 'source_id')
l=list(nx.connected_components(G))
newdf=pd.DataFrame(l)
newdf
Out[334]: 
     0    1     2     3     4     5
0  975  830  None  None  None  None
1  984  495   636   152   569   657 
# here you saw all the value belong to one group, they are in the same line 

詳細信息,現在同一組索引將具有相同的ID

d=[dict.fromkeys(y,x)for x , y in enumerate(list(nx.connected_components(G)))]
d={k:v for element in d for k,v in element.items()}
ids=df.reply_id.dropna().map(d)
ids
Out[344]: 
1    1
2    1
3    1
4    1
5    0
6    1
Name: reply_id, dtype: int64

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM