说我有一个带有不同子标题的类似表格的数据框。我想将[x],[y],[z]的值从[x]列移到[x]之下和下一个[]值之上的每个值的另一列,如下所示:
0 [x]
1 a
2 b
3 c
4 [y]
5 d
6 e
7 [z]
8 f
到
0 a [x]
1 b [x]
2 c [x]
3 d [y]
4 e [y]
5 f [z]
6 g [z]
我的想法是为每个值[]拆分数据框,然后将值[]放在一列后合并数据框。有没有办法一次做到这一点?
答案 0 :(得分:1)
IIUC,
假设您的第一列称为A
想法是使用基本过滤和ffill
不确定g
在预期输出中的位置。
df.loc[df['A'].str.contains('\['),'new_col'] = df['A']
df['new_col'] = df['new_col'].ffill()
df_new = df.loc[df['A'].str.contains('\[')==False]
print(df_new)
A new_col
1 a [x]
2 b [x]
3 c [x]
5 d [y]
6 e [y]
8 f [z]
答案 1 :(得分:1)
尝试使用:
s = df['col'].copy()
s.loc[~s.str[0].eq('[')] = pd.np.nan
df['col2'] = s.ffill()
print(df[~df['col'].str[0].eq('[')].reset_index(drop=True))