我有一個名為 df_2021 的資料框:
IP isTrue
101 1
101 0
102 1
103 0
我還有另一個資料框,例如所謂的 df_2022:
IP
101
102
103
104
我想在 df_2022 中創建一個新列,isTrue2021用于檢查 IP 是否在 2021 年并且在任何行中為 True。我怎樣才能在熊貓中做到這一點?
預期的df:
IP isTrue2021
101 1
102 1
103 0
104 0
uj5u.com熱心網友回復:
讓我們嘗試groupby.anydf2021 然后將其映射到 df2022isTrue2021列
df2022['isTrue2021'] = (df2022['IP'].map(df2021.groupby('IP')['isTrue'].any())
.fillna(False).astype(int))
print(df2022)
IP isTrue2021
0 101 1
1 102 1
2 103 0
3 104 0
uj5u.com熱心網友回復:
您也可以在此處使用 sql left join,然后用 0 填充缺失的值:
df1 = pd.DataFrame({'IP': [101, 101, 102, 103], 'isTrue': [1, 0, 1, 0]})
df2 = pd.DataFrame({'IP': [101, 102, 103, 104]})
df1_tidy = df1.groupby('IP').agg(max)
df1_tidy
# isTrue
# IP
# 101 1
# 102 1
# 103 0
df3 = pd.merge(df2, df1_tidy, on='IP', how="left")
df3
# IP isTrue
# 0 101 1.0
# 1 102 1.0
# 2 103 0.0
# 3 104 NaN
df3.fillna(0).astype(int)
# IP isTrue
# 0 101 1
# 1 102 1
# 2 103 0
# 3 104 0
```
uj5u.com熱心網友回復:
您可以過濾 df_2021 并合并資料框:
df_2022 = df_2022.merge(df_2021[df_2021.isTrue==1],on='IP', how='left').fillna(0).rename(columns={'isTrue': 'isTrue2021'})
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/519758.html
標籤:Python熊猫
下一篇:當行等于熊貓時更新資料
