Python &Pandas:比较两个不同csv上的实例



Python和Pandas新手,感谢任何帮助。

我有两个csv,control.csvreplies.csv,它们都包含user_idtext列(见下文)。

control.csv

user_id,    text
4102,   text0
5109,   text1
5349,   text2

replies.csv

user_id,    text
4102,   texta
4102,   textb
5109,   textc

我想计算control.csvuser_id中的值出现在replies.csv中的次数。然后,我想在control.csv中名为replies的新列中写入该计数。期望的输出如下所示:

user_id,    text,   replies
4102,   text0,  2
5109,   text1,  1
5349,   text2,  0

可以通过下面的代码从replies.csv生成user_id的出现次数。然而,我不确定下一步该怎么做才能将control.csv中的user_idreplies.csv中的值计数相匹配。

import pandas as pd 
df_replies = pd.read_csv('replies.csv')
df_control = pd.read_csv('control.csv')
reply_count = df_replies['user_id'].value_counts()

有什么建议吗?谢谢你的帮助。

尝试通过groupby()+count()获得应答数,然后使用map()映射值,并使用fillna()填充NaN值为0:

control['replies']=(control['user_id'].map(replies.groupby('user_id')['text'].count())
.fillna(0,downcast='infer'))

与上面相同的方法,但使用merge():

count=replies.groupby('user_id')['text'].count().reset_index(name='replies')
control=control.merge(count,on='user_id',how='left').fillna(0,downcast='infer')

control输出:

user_id   text    replies
0   4102    text0   2
1   5109    text1   1
2   5349    text2   0

使用链接


…
(control
.merge(replies, how="left", on="user_id")
.groupby(by="user_id")
.agg(replies_=("text_y", "count"))
)

我们留下了连接控制数据和回复。这将导致NaN,其中数据存在于控制中,但不存在于应答中。这就是为什么要从回复中计算数据。

import pandas as pd
# create data
df_control  = pd.DataFrame([[4102,'text0'],[5109,'text1',[5349,'text2']],columns=['user_id','text'])
df_replies = pd.DataFrame([[4102,'texta'],[4102,'textb'], [5109,'textc']],columns=['user_id','text'])
# count value:isin the key process
df_replies_in_control = df_replies[df_replies['user_id'].isin(set(df_control['user_id']))]
df_replies_in_control_counts = df_replies_in_control['user_id'].value_counts()

# import num into control data df:give zero where not show in control
df_control_add_num = df_control.copy()
df_control_add_num['replies'] = [df_replies_in_control_counts[num]  if num in 
df_replies_in_control_counts.index else 0 for num in df_control['user_id']]

df_control_add_num就是结果。我希望这将解决你的问题。

相关内容

  • 没有找到相关文章

最新更新