I have a DataFrame:
df = pd.DataFrame({'B':[2,1,2],'C':['a','b','a']})
B C
0 2 'a'
1 1 'b'
2 2 'a'
我想在任何出现'b'的行上面插入一行,这一行与原先的行相同,只是把'b'变成了'c',最终得到以下结果:
B C
0 2 'a'
1 1 'b'
1 1 'c'
2 2 'a'
我真的想不出怎么做这件事情。
duplicates = df[df['C'] == 'b'].copy()
duplicates['C'] = 'c'
df.append(duplicates).sort_index()
在NumPy级别工作,这是一种矢量化的方法 -
arr = df.values
idx = np.flatnonzero(df.C=='b')
newvals = arr[idx]
newvals[:,df.columns.get_loc("C")] = 'c'
out = np.insert(arr,idx+1,newvals,axis=0)
df_index = np.insert(np.arange(arr.shape[0]),idx+1,idx,axis=0)
df_out = pd.DataFrame(out,index=df_index)
示例运行 -
In [149]: df
Out[149]:
B C
0 2 a
1 1 b
2 2 d
3 4 d
4 3 b
5 8 a
6 4 a
7 2 b
In [150]: df_out
Out[150]:
0 1
0 2 a
1 1 b
1 1 c
2 2 d
3 4 d
4 3 b
4 3 c
5 8 a
6 4 a
7 2 b
7 2 c
a
而不是c
。 - shivsnb
,会怎么样? - Divakar