2020-10-21 pandas - tables關係

michael_wq發表於2020-10-22

Pandas

Q: inner join用什麼?

# df1, df2
df1.merge(df2, on='xxx', suffixes=('_aaa', '_bbb'))

Q: 多個tables拼接如何?

# df1, df2, df3
df1.merge(df2, on=['xxx', 'yyy']) /
.merge(df3, on='zzz', suffixes=(...))

Q: left join 怎麼搞?

df.merge(df2, on='xxx', how='left')

Q: right join又怎麼搞?

df1.merge(df2, how='right',
		left_on='l_id', right_on='r_id')

Q: outer join是個什麼鬼?
在這裡插入圖片描述
在這裡插入圖片描述

df1.merge(df2, on='xxx', how='outer', suffixes=('_x', '_y'))

Q: 這個怎麼搞?
在這裡插入圖片描述

#先outer
iron_1_and_2 = iron_1_actors.merge(iron_2_actors, on='id', how='outer', suffixes=('_1', '_2'))
#再找NaN,null
m = ((iron_1_and_2['name_1'].isnull()) | 
     (iron_1_and_2['name_2'].isnull()))
#filter出null的
print(iron_1_and_2[m].head())

Q: semi-join是啥子?anti-join 呢?
在這裡插入圖片描述
對比與inner join,table並沒有合併。
在這裡插入圖片描述
anti-join

# Merge employees and top_cust
empl_cust = employees.merge(top_cust, on='srid', 
                                 how='left', indicator=True)
#這個indicator就會顯示出該row是來自於left還是right還是both,有一個判別功能。column名為 _merge
# Select the srid column where _merge is left_only
#選擇leftonly就是把沒有拼接到table2的專案都找出來了。
srid_list = empl_cust.loc[empl_cust['_merge'] == 'left_only', 'srid']

# Get employees not working with top customers
print(employees[employees['srid'].isin(srid_list)])

semi-join

# 1st inner join first,找出共性
df_merge = df1.merge(df2, on='id')

# filter
df_common_list = df1['id'].isin(df_merg['id'])

# select
df1[df_common_list]

Q: 兩個tables如何上下拼接?

# df1, df2, df3
df_concat = pd.concat([df1, df2, df3], ingore_index=True)

Q: 如何找correlation?

xxx.corr()

Q: merge_asof()怎麼用
在這裡插入圖片描述
在這裡插入圖片描述
Q: 像使用sql語句的是什麼?

xxx.query('name == "aaa" or (age>100 and sex=="male")')

Q:
在這裡插入圖片描述
id_vars==>是這兩個columns不變的情況
在這裡插入圖片描述
在這裡插入圖片描述

相關文章