2017-05-02 6 views
0

私は、次のデータフレームがあります。Pythonのデータフレームの相互作用

topic student level week 
1  a  1  1 
1  b  2  1 
1  a  3  1 
2  a  1  2 
2  b  2  2 
2  a  3  2 
2  b  4  2 

新しいデータフレームが話題を通じて、学生間の相互作用を表している必要がありますが。 「学生のソースは」、「学生先」、「」と「応答カウント」:これは、4つの列が含まれている必要があります。

生徒先は、各生徒がトピックを共有した生徒です。

返信数学生先回数は「直接」学生ソースに答えています。新しいデータフレームがどのように見えるはずです

st_source st_dest week reply_count 
    a  b  1  1 
    a  b  2  2 
    b  a  1  1 
    b  a  2  1 

返信数は例を簡単に説明することができます。

スレッドが学生Aによって開始された場合(レベル1でメッセージを送信した場合)、BはAに応答し(レベル2でメッセージを送信)、CはBに応答して(レベル3でメッセージを送信します。その後、BはAに直接的に返答し、Cは Bに直接回答しましたが、A へのCの返信は直接ではありません(したがって、それはカウントされません)。

誰かに考えがありますか?

ありがとうございます!

+1

何か試しましたか?これは宿題のように見えます。 – Anddrrw

答えて

1
result = (df.groupby('week').apply(
     lambda g: g.groupby([g.student.shift(), g.student]) 
     .week.agg({'reply_count': 'count'}) 
     .rename_axis(("st_source", "st_dest")) 
    ).reset_index()) 
​ 
result[['st_source', 'st_dest', 'week', 'reply_count']].sort_values(['st_source', 'st_dest']) 

# st_source  st_dest week reply_count 
#0  a   b  1   1 
#2  a   b  2   2 
#1  b   a  1   1 
#3  b   a  2   1 
+1

あなたの提案に感謝@Psidom!私は若干異なる解決策を持っています。学生ソースと目的地は同じ人です。たぶん私はこの例で与えられたよりも多くの学生がいるからです。 – Sheron

関連する問題