Python&;Pandas:从数据帧获取数据并创建新数据帧的正确方法

Python&;Pandas:从数据帧获取数据并创建新数据帧的正确方法,python,pandas,Python,Pandas,这个问题经常出现,我目前的方法不是最佳方法 例如 我有一个数据帧(df1),其中包含一些数据: date tweet sent_by 2017/01/01 'OMG @user2 @POTUS' user1 2017/01/01 'THIS IS A TWEET!' user17 ...... ..... ...... 我有一个用户列表: user_l

这个问题经常出现,我目前的方法不是最佳方法

例如

我有一个数据帧(df1),其中包含一些数据:

date          tweet                    sent_by

2017/01/01    'OMG @user2 @POTUS'      user1
2017/01/01    'THIS IS A TWEET!'       user17
......        .....                    ......
我有一个用户列表:

user_list = ['user1','user2', ...]
现在,我想通过df1检查推文中是否提到任何用户(不包括发送者),并创建一个包含相关信息的新数据帧(df2)

我目前的方法是:

date_list = []
tweet_list = []
sent_by_list = []
user_mentioned_list = []

for i in range(len(df1)):
    for user in user_list:
        if user in df1['tweet'][i] and user != df1['sent_by'][i]:
            date_list.append(df1['date'][i])
            tweet_list.append(df1['tweet'][i])
            sent_by_list.append(df1['sent_by'][i])
            user_mentioned_list.append(user)

df2 = pd.DataFrame()
df2['date'] = date_list
df2['tweet'] = tweet_list
df2['sent_by'] = sent_by_list
df2['user_mentioned'] = user_mentioned_list
获取数据并形成新数据框的最佳方法是什么?

我认为您需要通过
列表
|
正则表达式(或)
与上一个过滤器进行比较:

详情:

print (df1)
         date                tweet sent_by user_mentioned
0  2017/01/01  'OMG @user2 @POTUS'   user1          user2
1  2017/01/01  'OMG @user2 @POTUS'   user2          user2
2  2017/01/01  'OMG @user2 @POTUS'   user4          user2
3  2017/01/01  'OMG @user4 @POTUS'   user1            NaN
4  2017/01/01   'THIS IS A TWEET!'  user17            NaN
print (df1)
         date                tweet sent_by user_mentioned
0  2017/01/01  'OMG @user2 @POTUS'   user1          user2
1  2017/01/01  'OMG @user2 @POTUS'   user2          user2
2  2017/01/01  'OMG @user2 @POTUS'   user4          user2
3  2017/01/01  'OMG @user4 @POTUS'   user1            NaN
4  2017/01/01   'THIS IS A TWEET!'  user17            NaN