使用熊猫基于现有列值将新列添加到数据框

时间:2019-06-10 23:03:04

标签: python pandas dataframe

我正在使用通过导入创建的.csv文件创建的数据框。我想(1)在数据框中创建一个新列,并(2)使用现有列中的值为新列分配一个值。这是我正在使用的示例:

   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

因此,我想基于现有的“ id”列值创建一个新列“ side”,并使该边具有值“ A”或“ B”:

   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

我已经到了可以创建新列并分配新值的地步,但是当我尝试在“边”列上使用.groupby方法时,它无法按预期工作。

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"]

调用df["side"]会产生空白输出,但是单独调用df会产生以下结果: df shows a value in the side column

因此,数据框中有一个值,但是使用.groupby方法会将边栏中的值视为不存在。这是一个真正的骗子。我是Python的新手,如果有人可以向我解释我在做什么错,我将不胜感激。

2 个答案:

答案 0 :(得分:3)

只需使用str[]。我看不到图像。如果您的id具有2个以上的字符,则需要此字符来获取最后一个字符

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 :(得分:2)

1。 import ... export default { new: (args) => { const store = { reactElement: <DateTimePicker startDate={args.startDate} endDate={args.endDate} /> }; return { getState: () => { return store.reactElement.getState(); // DOESN'T WORK }, render: (selector) => { ReactDOM.render(store.reactElement, document.querySelector(selector)); } }; } };

Series.str

或者为了安全起见,更笼统。

2。 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 str.extract

regex

3。 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

Str.slice