Add a new column to a dataframe based on an existing column value using pandas
本问题已经有最佳答案,请猛点这里访问。
我正在使用通过导入创建的.csv文件创建的数据框。 我想(1)在数据框中创建一个新列,并(2)使用现有列中的值为新列分配一个值。 这是我正在使用的示例:
1 2 3 4 5 | date id height gender dd/mm/yyyy 1A 6 M dd/mm/yyyy 2A 4 F dd/mm/yyyy 1B 1 M dd/mm/yyyy 2B 7 F |
因此,我想创建一个新列" side",并根据现有的" id"列值使该边具有值" A"或" B":
1 2 3 4 5 | date id height gender side dd/mm/yyyy 1A 6 M A dd/mm/yyyy 2A 4 F A dd/mm/yyyy 1B 1 M B dd/mm/yyyy 2B 7 F B |
我已经到了可以创建新列并分配新值的地步,但是当我尝试在"侧边"列上使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | df = pd.read_csv("clean.csv") df = df.drop(["Unnamed: 0"], axis=1) df["side"] ="" df.columns = ["date","id","height","gender","side"] for i, row in df.iterrows(): if"A" in row["id"]: df.at[i, row["side"]] ="A" else: df.at[i, row["side"]] ="B" df["side"] |
调用
因此,数据框中有一个值,但是使用.groupby方法会将边栏中的值视为不存在。 这是一个真正的骗子。 我是Python的新手,如果有人可以向我解释我在做什么错,我将不胜感激。
只需使用
1 2 3 4 5 6 7 8 9 | df['side'] = df.id.str[-1] Out[582]: date id height gender side 0 dd/mm/yyyy 1A 6 M A 1 dd/mm/yyyy 2A 4 F A 2 dd/mm/yyyy 1B 1 M B 3 dd/mm/yyyy 2B 7 F B |
1.
1 2 3 4 5 6 7 | df['id'].str[-1:] date id height gender side 0 dd/mm/yyyy 1A 6 M A 1 dd/mm/yyyy 2A 4 F A 2 dd/mm/yyyy 1B 1 M B 3 dd/mm/yyyy 2B 7 F B |
或为了安全起见,更笼统。
2.
1 2 3 4 5 6 7 | df['side'] = df['id'].str.extract('([A-Za-z])') date id height gender side 0 dd/mm/yyyy 1A 6 M A 1 dd/mm/yyyy 2A 4 F A 2 dd/mm/yyyy 1B 1 M B 3 dd/mm/yyyy 2B 7 F B |
3.
1 2 3 4 5 6 7 | df['side'] = df['id'].str.slice(start=-1) date id height gender side 0 dd/mm/yyyy 1A 6 M A 1 dd/mm/yyyy 2A 4 F A 2 dd/mm/yyyy 1B 1 M B 3 dd/mm/yyyy 2B 7 F B |