我有一個資料框,我想在其中選擇特定的行,在 Python 中進行轉換和連接。
資料
id type stat country
1 aa1 y ca
2 bb2 n ny
3 cc3 y tx
期望的
Use Input("select type value: ")
type in: aa1, bb2
*selects appropriate rows
id type stat country
1 aa1 y ca
2 bb2 n ny
運行某種型別的轉換 - 改變
df2 = df["country"].replace({"ca": "tx"}, inplace=True)
將新轉換的行子集與剩余資料集連接起來
id type stat country
1 aa1 y tx
2 bb2 n ny
3 cc3 y tx
正在做
一個 SO 成員建議這部分效果很好,我正在嘗試將剩余的行與轉換后的子集拼湊在一起
out = input("select type value: ")
vals = [v.strip() for v in out.split(',')]
df1 = df.query('type.isin(@vals)')
任何建議表示贊賞。
uj5u.com熱心網友回復:
這應該有效:
out = input("select type value: ")
vals = [v.strip() for v in out.split(',')]
# Find rows where criteria match
query_mask = df["type"].isin(vals)
# Do transformation only for those rows
df[query_mask] = df.loc[query_mask].replace({"ca": "tx"})
如果您真的希望剩余資料位于 df 的末尾:
out = input("select type value: ")
vals = [v.strip() for v in out.split(',')]
# Find rows where criteria match
query_mask = df["type"].isin(vals)
# Grab rows where criteria match
query_rows = df.loc[query_mask]
# Grab leftover rows
leftover_rows = df.loc[~query_mask]
# Do transformations
query_rows.replace({"ca": "tx"}, inplace=True)
# Concatenate transformed rows and leftovers
df = pd.concat([query_rows, leftover_rows])
uj5u.com熱心網友回復:
讓我們試試pandasql update
import pandasql as ps
type = 'aa1','bb1'
q1 = """SELECT * FROM df where type in ('%s','%s') """ %(type)
df.update(ps.sqldf(q1, locals()).replace({"ca": "tx"}))
df
Out[257]:
id type stat country
0 1.0 aa1 y tx
1 2.0 bb2 n ny
2 3.0 cc3 y tx
uj5u.com熱心網友回復:
您可以使用mask和combine_first:
df = df.mask(~df['id'].isin(vals)).replace({'country': {'ca': 'tx'}}) \
.combine_first(df)
print(df)
# Output
id type stat country
1 aa1 y tx
2 bb2 n ny
3 cc3 y tx
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/416472.html
標籤:
上一篇:加快點積乘法的Cython實作
