我有一个由两列组成的df,如下所示:
rows A B
0 1 7
1 9 11
2 20 30
3 32 35
我想创建另一列,以便将A列的每一行插入到B列的两行之间。
输出看起来像这样:
rows C
0 7
1 9
2 11
3 20
4 30
5 32
6 35
非常感谢您的帮助
答案 0 :(得分:2)
采用列A
和B
的数组,然后使用flatten
或ravel
并从第一个索引取值:
df1 = pd.DataFrame(df[['A','B']].values.flatten()[1:],columns=['C']).\
reset_index().rename(columns={'index':'rows'}
OR:
df1 = pd.DataFrame(df[['A','B']].values.ravel()[1:],columns=['C']).\
reset_index().rename(columns={'index':'rows'})
print(df1)
rows C
0 0 7
1 1 9
2 2 11
3 3 20
4 4 30
5 5 32
6 6 35
答案 1 :(得分:0)
将ravel
与arange
和DataFrame
建设者一起使用:
a = df[['A','B']].values.ravel()[1:]
df1 = pd.DataFrame({'rows':np.arange(len(a)), 'C':a})
print (df1)
rows C
0 0 7
1 1 9
2 2 11
3 3 20
4 4 30
5 5 32
6 6 35
您还可以选中What is the difference between flatten and ravel functions in numpy?
或使用melt
:
df1 = (df.melt(['rows'], value_name='C')
.sort_values('rows')['C']
.iloc[1:]
.reset_index(drop=True)
.rename_axis('rows')
.reset_index())
print (df1)
rows C
0 0 7
1 1 9
2 2 11
3 3 20
4 4 30
5 5 32
6 6 35