Lyn*_*ynn 2 python numpy pandas
我有一个数据框 df,我想从特定列中获取字符串的前 3 个字符并将这些字符放在另一列下
数据
id value stat
aaa 10 aaa123
aaa 20
aaa 500 aaa123
bbb 20
bbb 10 bbb123
aaa 5 aaa123
aaa123
ccc123
Run Code Online (Sandbox Code Playgroud)
想要的
id value stat
aaa 10 aaa123
aaa 20
aaa 500 aaa123
bbb 20
bbb 10 bbb123
aaa 5 aaa123
aaa aaa123
ccc ccc123
Run Code Online (Sandbox Code Playgroud)
正在做
df.append({'aaa':aaa123}, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
我相信我必须附加值,可能使用映射或附加函数,但是,不确定如何指定前 3 个字符。任何建议表示赞赏
一种选择是Series.fillna+Series.str对前 3 个值进行切片:
df['id'] = df['id'].fillna(df['stat'].str[:3])
Run Code Online (Sandbox Code Playgroud)
id value stat
0 aaa 10.0 aaa123
1 aaa 20.0 NaN
2 aaa 500.0 aaa123
3 bbb 20.0 NaN
4 bbb 10.0 bbb123
5 aaa 5.0 aaa123
6 aaa NaN aaa123
7 ccc NaN ccc123
Run Code Online (Sandbox Code Playgroud)
对于这种情况可能有点矫枉过正,但Series.str.extract也可以使用:
df['id'] = df['id'].fillna(df['stat'].str.extract(r'(^.{3})')[0])
Run Code Online (Sandbox Code Playgroud)
mask如果这些是空字符串而不是NaN:
df['id'] = df['id'].mask(df['id'].eq('')).fillna(df['stat'].str[:3])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |