Pandas 获得与 SQL 语句相同结果的 Pythonic 方式是啥:“UPDATE-LEFT JOIN - SET - WHERE”?

Posted

技术标签:

【中文标题】Pandas 获得与 SQL 语句相同结果的 Pythonic 方式是啥:“UPDATE-LEFT JOIN - SET - WHERE”?【英文标题】:Which is the Pythonic way for Pandas to obtain the same result as an SQL statement: "UPDATE- LEFT JOIN - SET - WHERE"?Pandas 获得与 SQL 语句相同结果的 Pythonic 方式是什么:“UPDATE-LEFT JOIN - SET - WHERE”? 【发布时间】:2019-10-02 00:11:38 【问题描述】:

我想在 Pandas 中复制以下 SQL 结构“更新 dataframe1 LEFT JON dataframe2 SET dataframe1.column1 = dataframe2.column2 WHERE dataframe1.column3 > X”

我知道可以合并数据框,然后使用 ".where" 处理合并的列

但是,它似乎不是一个简单的解决方案。

df = pd.merge(df1,df2, suffix(a,b))
df['clmn1'] = df['clmn1_b'].where( df[clmn1]>0, df['clmn1_b'])

有没有更好的方法来达到目标​​? 谢谢

【问题讨论】:

你是加入一个特定的索引,还是加入几个重叠的列? 我认为 map 在这里工作,或者 set_index() 我的想法和 WeNYoBen 一样。 mapreplace 都可以使用 @AndyHayden 我指的是采用通用方法,有时有索引,在其他情况下没有索引。对于一般情况,假设您有一个包含客户名称和国家/地区的列,“客户列表”:[Name, Gender, country] 和字段列表:[[Jack, M, USA], [Nick, M, UK], [Alphio, F, RU], [Jenny, F, USA]] 那么你有另一个带有“缩写”的表:[USA: United States, UK, United Kingdom, etc..] .. 我的用例在当性别为男性(M)时,要更新表“客户列表”,将缩写替换为长国名。 @WeNYoBen 你会如何结合合并和映射? 【参考方案1】:

使用 cmets 中的示例:

In [21]: df
Out[21]:
     Name Gender country
0    Jack      M     USA
1    Nick      M      UK
2  Alphio      F      RU
3   Jenny      F     USA

In [22]: country_map =  'USA': 'United States', 'UK': 'United Kingdom', 'RU': 'Russia'

In [23]: df.country.map(country_map)
Out[23]:
0     United States
1    United Kingdom
2            Russia
3     United States
Name: country, dtype: object

要仅更新 M 行,您可以使用 loc 和 update:

In [24]: df.country.update(df[df.Gender == 'M'].country.map(country_map))

In [25]: df
Out[25]:
     Name Gender         country
0    Jack      M   United States
1    Nick      M  United Kingdom
2  Alphio      F              RU
3   Jenny      F             USA

【讨论】:

以上是关于Pandas 获得与 SQL 语句相同结果的 Pythonic 方式是啥:“UPDATE-LEFT JOIN - SET - WHERE”?的主要内容,如果未能解决你的问题,请参考以下文章

如何修改以下代码以获得与“存在”相同的结果?(SQL)

MySQL CASE 语句在 Workbench 和 Angular 中返回不同的结果

如何使用 fetch() 获得与 fetchAll() 相同的结果?

如何在熊猫中获得与 cume_dist 等效的 SQL?

对 Pandas Dataframe 的 SQL 查询结果

sql 语句中如何比较当前时间与指定时间是不是相同