python - 熊猫应用并分配给多个列
问题描述
我有一个数据框,其列如下:
col
a2_3
f4_4
c4_1
我想从该列中添加两列,如下所示:
col col1 col2 col3
a2_3 a 2 3
f4_4 f 4 4
c4_1 c 4 1
以下不起作用:
df[['col1', 'col2', 'col3']] = df['col'].apply(lambda s: (s[1], *s[1:].split("_")) )
如何将一系列元组分配给新列?
解决方案
这里apply
没有必要,先用 with 索引,str
然后用Series.str.split
with expand=True
:
df[['col1', 'col2']] = df['col'].str[1:].str.split("_", expand=True)
print (df)
col col1 col2
0 a2_3 2 3
1 f4_4 4 4
2 c4_1 4 1
您的解决方案可以使用Series
构造函数,但速度很慢:
df[['col1', 'col2']] = df['col'].apply(lambda s: pd.Series(s[1:].split("_")))
更快的是使用 DataFrame 构造函数:
df1 = pd.DataFrame(df['col'].apply(lambda s: s[1:].split("_")).tolist(), index=df.index)
df[['col1', 'col2']] = df1
或列表理解:
df[['col1', 'col2']] = pd.DataFrame([s[1:].split("_") for s in df['col']], index=df.index)
编辑:解决方案类似:
L = df['col'].apply(lambda s: (s[0], *s[1:].split("_"))).tolist()
df[['col1', 'col2', 'col3']] = pd.DataFrame(L, index=df.index)
df[['col1', 'col2', 'col3']] = pd.DataFrame([(s[0], *s[1:].split("_")) for s in df['col']],
index=df.index)
print (df)
col col1 col2 col3
0 a2_3 a 2 3
1 f4_4 f 4 4
2 c4_1 c 4 1
推荐阅读
- sql-server - 无法在 Python 映像上找到包 msodbcsql
- r - tapply 的问题
- scala - 为什么scala在打印调用它的行之前调用传递给println的方法?
- typescript - 消除firebase https函数端点中的双重函数名称
- django - 城市名称中的 KeyError
- c# - 仅用一根手指倾斜旋转自定义轴
- c++ - 如何在没有覆盖运算符<的情况下在c ++中打印对象的成员
我知道在 ruby 语言中有一个名为 object.inspect的方法 可以在不覆盖 toString(Java) <<(in cpp) 的情况下打印对象中的所有成员,这对
- string - 'distance(from:to:)' 已弃用:所有索引距离现在都是 Int 类型
- react-native - 在 react-native 中实现多个 Progress.bar
- react-native - this.props.navigation.navigate() 不适用于 AppDrawerNavigator