- 文章浏览 I
我的题解:
import pandas as pd
def article_views(views: pd.DataFrame) -> pd.DataFrame:
df=views[views['author_id']==views['viewer_id']]
df=df.sort_values('author_id')
df=df.rename(columns={"author_id":"id"})
df= df[['id']]
df=df.drop_duplicates()
return df
官方题解:
import pandas as pd
def article_views(views: pd.DataFrame) -> pd.DataFrame:
df = views[views['author_id'] == views['viewer_id']]
df.drop_duplicates(subset=['author_id'], inplace=True)
df.sort_values(by=['author_id'], inplace=True)
df.rename(columns={'author_id':'id'}, inplace=True)
df = df[['id']]
return df
作者:力扣官方题解
链接:https://leetcode.cn/problems/article-views-i/solutions/168689/wen-zhang-liu-lan-i-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收获:要记牢参数。
- 计算特殊奖金
我的题解
import pandas as pd
def calculate_special_bonus(employees: pd.DataFrame) -> pd.DataFrame:
def func(x):
x['bonus'] = x['salary'] if x['employee_id']%2==1 and x['name'][0]!='M' else 0
return x
df=employees.apply(lambda x: func(x) ,axis=1)
df = df[['employee_id','bonus']]
df=df.sort_values('employee_id')
return df
官方题解:
def calculate_special_bonus(employees: pd.DataFrame) -> pd.DataFrame:
employees['bonus'] = employees.apply(
lambda x: x['salary'] if x['employee_id'] % 2 and not x['name'].startswith('M') else 0,
axis=1
)
df = employees[['employee_id', 'bonus']].sort_values('employee_id')
return df
作者:力扣官方题解
链接:https://leetcode.cn/problems/calculate-special-bonus/solutions/2366165/ji-suan-te-shu-jiang-jin-by-leetcode-sol-ipj4/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收获:可以把dtaframe的apply结果直接对一列赋值 ,之前习惯于赋值df。
employees[‘bonus’] = employees.apply(xxx)
- 修复表中的名字
import pandas as pd
def fix_names(users: pd.DataFrame) -> pd.DataFrame:
users['name']=users.apply(lambda x:x['name'][0].upper()+x['name'][1:].lower(),axis=1)
users=users.sort_values('user_id')
return users
官方题解:
import pandas as pd
def fix_names(users: pd.DataFrame) -> pd.DataFrame:
users["name"] = users["name"].str[0].str.upper() + users["name"].str[1:].str.lower()
return users.sort_values("user_id")
作者:力扣官方题解
链接:https://leetcode.cn/problems/fix-names-in-a-table/solutions/2366177/xiu-fu-biao-zhong-de-ming-zi-by-leetcode-vrs5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
import pandas as pd
def fix_names(users: pd.DataFrame) -> pd.DataFrame:
users["name"] = users["name"].str.title()
return users.sort_values("user_id")
作者:力扣官方题解
链接:https://leetcode.cn/problems/fix-names-in-a-table/solutions/2366177/xiu-fu-biao-zhong-de-ming-zi-by-leetcode-vrs5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收获:
1.字符串的title()函数。
2. dataframe对列操作.str后也可以再切片操作,之前知道可以str操作,不知道可以切片再操作。 users[“name”].str[0].str.upper()
- 患某种疾病的患者
def find_patients(patients: pd.DataFrame) -> pd.DataFrame:
def func(x):
list_con=x['conditions'].split(' ')
for i in list_con:
if i[0:5]=='DIAB1':
x['is_ok']='ok'
return x
patients['is_ok']=None
df=patients.apply(lambda x:func(x),axis=1)
df=df.dropna(subset=['is_ok'])
df=df.drop(['is_ok'],axis=1)
return df
官方题解:
方法 1:使用正则表达式单词边界
def find_patients(patients: pd.DataFrame) -> pd.DataFrame:
return patients[patients["conditions"].str.contains(r"\bDIAB1", regex=True)]
作者:力扣官方题解
链接:https://leetcode.cn/problems/patients-with-a-condition/solutions/2366188/huan-mou-chong-ji-bing-de-huan-zhe-by-le-7i52/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
方法 2:不使用正则表达式
def find_patients(patients: pd.DataFrame) -> pd.DataFrame:
return patients[patients["conditions"].str.startswith("DIAB1") | patients["conditions"].str.contains(" DIAB1", regex=False)]
作者:力扣官方题解
链接:https://leetcode.cn/problems/patients-with-a-condition/solutions/2366188/huan-mou-chong-ji-bing-de-huan-zhe-by-le-7i52/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收获:(字符串函数了解太少)
- str.contains(r"\bDIAB1", regex=True)
这个\b是表示字母数字与非字母数字的边界。。可以当成单词开头理解。
contains() 是一个字符串方法,用于检查字符串中是否包含指定的子字符串。如果字符串包含子字符串,则返回 True,否则返回 False。
在某些情况下,需要在使用正则表达式时将特定参数设置为 True(regex=True)。- str.startswith(“DIAB1”)
startswith() 是一个字符串方法,用于检查字符串是否以指定的前缀开始。如果字符串以指定的前缀开始,则返回 True,否则返回 False。
- 无效的推文
import pandas as pd
def invalid_tweets(tweets: pd.DataFrame) -> pd.DataFrame:
df=tweets[tweets['content'].str.len()>15]
tweet_id=df[['tweet_id']]
return tweet_id
官方题解:
def invalid_tweets(tweets: pd.DataFrame) -> pd.DataFrame:
is_valid = tweets['content'].str.len() > 15
df = tweets[is_valid]
return df[['tweet_id']]
作者:力扣官方题解
链接:https://leetcode.cn/problems/invalid-tweets/solutions/2366155/wu-xiao-de-tui-wen-by-leetcode-solution-5tfp/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收获:tweets[is_valid]
可以这样进行筛选dataframe[布尔列表]
- 查找拥有有效邮箱的用户
官方题解:
概述
给出一个包含用户及其电子邮件的表,我们希望根据用户的电子邮件地址的有效性来筛选用户。一封有效的电子邮件应该以只包含允许字符的前缀开头,以域名 '@leetcode.com' 结尾。
方法 1:使用正则表达式
思路
一般来说,如果你被要求匹配一个字符串,应该最先想到写一个正则表达式模式进行匹配。
正则表达式提供各种功能,以下是一些相关功能:
^:表示一个字符串或行的开头
[a-z]:表示一个字符范围,匹配从 a 到 z 的任何字符。
[0-9]:表示一个字符范围,匹配从 0 到 9 的任何字符。
[a-zA-Z]:这个变量匹配从 a 到 z 或 A 到 Z 的任何字符。请注意,你可以在方括号内指定的字符范围的数量没有限制,您可以添加想要匹配的其他字符或范围。
[^a-z]:这个变量匹配不在 a 到 z 范围内的任何字符。请注意,字符 ^ 用来否定字符范围,它在方括号内的含义与它的方括号外表示开始的含义不同。
[a-z]*:表示一个字符范围,匹配从 a 到 z 的任何字符 0 次或多次。
[a-z]+:表示一个字符范围,匹配从 a 到 z 的任何字符 1 次或多次。
.:匹配任意一个字符。
\.:表示句点字符。请注意,反斜杠用于转义句点字符,因为句点字符在正则表达式中具有特殊含义。还要注意,在许多语言中,你需要转义反斜杠本身,因此需要使用\\.。
$:表示一个字符串或行的结尾。
核心思想是将 name 列的第一个字符从其余字符分开,相应地改变它们的大小写,最后把他们拼回在一起。
算法
选择 mail 列匹配正则表达式的那些行。
实现
MySQL
SELECT user_id, name, mail
FROM Users
-- 请注意,我们还转义了`@`字符,因为它在某些正则表达式中具有特殊意义
WHERE mail REGEXP '^[a-zA-Z][a-zA-Z0-9_.-]*\\@leetcode\\.com$';
Pandas
import pandas as pd
def valid_emails(users: pd.DataFrame) -> pd.DataFrame:
# 注意我们如何使用原始字符串(在前面放一个‘r’)来避免必须转义反斜杠
# 还要注意,我们对`@`字符进行了转义,因为它在某些正则表达式中具有特殊意义
return users[users["mail"].str.match(r"^[a-zA-Z][a-zA-Z0-9_.-]*\@leetcode\.com$")]
作者:力扣官方题解
链接:https://leetcode.cn/problems/find-users-with-valid-e-mails/solutions/2366182/cha-zhao-yong-you-you-xiao-you-xiang-de-gn7ym/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收获:正则表达式
- 删除重复的电子邮箱
import pandas as pd
# Modify Person in place
def delete_duplicate_emails(person: pd.DataFrame) -> None:
person.sort_values('id',inplace=True)
person.drop_duplicates(subset=['email'],keep='first',inplace=True)
return
官方题解:
import pandas as pd
def delete_duplicate_emails(person: pd.DataFrame) -> None:
min_id = person.groupby('email')['id'].transform('min')
removed_person = person[person['id'] != min_id]
person.drop(removed_person.index, inplace=True)
return
作者:力扣官方题解
链接:https://leetcode.cn/problems/delete-duplicate-emails/solutions/2366230/shan-chu-zhong-fu-de-dian-zi-you-xiang-b-8e7p/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
- name
超链接
我的题解:
官方题解:
收获:
# 打印序号模板
if __name__ == '__main__':
for i in range(4,100):
print('{}. name'.format(i))
print('\n\n')
print('[超链接](超链接)')
print('我的题解:')
print('```python\n\n```')
print('官方题解:')
print('```python\n\n```')
print('> 收获:')