我正在使用通过导入创建的.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
会产生以下结果:
因此,数据框中有一个值,但是使用.groupby方法会将边栏中的值视为不存在。这是一个真正的骗子。我是Python的新手,如果有人可以向我解释我在做什么错,我将不胜感激。
答案 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)
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
或者为了安全起见,更笼统。
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
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