2017-02-24 9 views
0

私はチャットデータセットを持っており、会話グループを作り、いくつのメッセージを送信したかをカウントしたいと思います。python group chat id

ここは私のデータです。このデータは、  "ID"のチャットログで、名前はJimmyです。

Sender  Receiver Text 
ID   person1 HI 
person1  ID   Hello~ 
ID   person1 My name is Jimmy 
person1  ID   Nice to meet you! 
ID   person1 Nice to meet you, too 
ID   person2 Hi 
person1  ID   Hi there 
ID   person2 My name is Jimmy 
person1  ID   My name is Abi 
ID   person2 Nice to meet you 
...   ....  ..... 

"ID"は複数の男とチャットできます。
各会話のメッセージ数を数えたいと思います。
この場合、両方の会話には5つのメッセージがあります。

私はコードを書いていますが、データが大きいので非効率的です。

#chat_df is the dataframe of chat data 
    df = [] 
    total_message =[] 
    receiver_id = chat_df["receiver"].unique() 
    for x in rid: 
     total_message.append(len(chat_df[(chat_df["receiver"] == x) | (chat_df["sender"] == x)])) 
     df.append(chat_df[(chat_df["receiver"] == x) | (chat_df["sender"] == x)]) 

2人のチャットデータのペアを取得する効率的な方法はありますか?

答えて

1

私はあなたがvalue_countsstackが必要だと思う:

df1 = chat_df[['Sender','Receiver']].stack().value_counts().reset_index() 
df1.columns = ['People','Counts'] 
print (df1) 
    People Counts 
0  ID  10 
1 person1  7 
2 person2  3 

EDIT:

#get number of all words 
chat_df['Len'] = chat_df.Text.str.split().str.len() 
#reshape dataframe 
chat_df = chat_df.set_index('Len')[['Sender','Receiver']].stack().reset_index(name='People') 
print (chat_df) 
    Len level_1 People 
0  1 Sender  ID 
1  1 Receiver person1 
2  1 Sender person1 
3  1 Receiver  ID 
4  4 Sender  ID 
5  4 Receiver person1 
6  4 Sender person1 
7  4 Receiver  ID 
8  5 Sender  ID 
9  5 Receiver person1 
10 1 Sender  ID 
11 1 Receiver person2 
12 2 Sender person1 
13 2 Receiver  ID 
14 4 Sender  ID 
15 4 Receiver person2 
16 4 Sender person1 
17 4 Receiver  ID 
18 4 Sender  ID 
19 4 Receiver person2 

#groupby by People and aggregate sum and size 
chat_df1 = chat_df.groupby('People')['Len'].agg(['size','sum']) 
chat_df1.columns = ['Count','Len_words'] 
chat_df1 = chat_df1.reset_index() 
#filter all sizes higher as 5 
chat_df1 = chat_df1[chat_df1['Count'] > 5] 
print (chat_df1) 
    People Count Len_words 
0  ID  10   30 
1 person1  7   21 
+0

ありがとうございました!それだけが必要! もう1つの質問です。 もし私がそれらのより高いカウント(5以上)について各メッセージのテキストの数を数えたいのであれば、それを達成するためにどのように提案しますか? お世話になりました! – jimmy15923

+0

ありがとうございます。私はあなたの2番目の質問について考えています。私はループとして、[ブールインデックス作成](http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-インデックス作成)。 – jezrael

+0

平均数は何文字ですか?単語を数えますか?またはテキストメッセージの長さ? – jezrael