如何将某些值移动到另一列为随后的所有值

时间:2019-12-16 10:27:30

标签: python pandas dataframe

说我有一个带有不同子标题的类似表格的数据框。我想将[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]

我的想法是为每个值[]拆分数据框,然后将值[]放在一列后合并数据框。有没有办法一次做到这一点?

2 个答案:

答案 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))