我有以下数据框:
import numpy as np
import pandas as pd
x = [1.1,2.1,0.5]
y = [0.1,3.4,7]
gn = ['foo','bar','qux']
df = pd.DataFrame({'gn':gn, 'x':x, 'y':y})
df
产生这个:
In [148]: df
Out[148]:
gn x y
0 foo 1.1 0.1
1 bar 2.1 3.4
2 qux 0.5 7.0
然后我转换为numpy ndarray后进行一些转换:
df.set_index("gn",inplace=True)
npar = df.as_matrix()
npar_new = npar + 1
npar_new
产生这个:
array([[ 2.1, 1.1],
[ 3.1, 4.4],
[ 1.5, 8. ]])
我的问题是如何将df
的列和行名称( gn )恢复到npar_new
。期望的最终结果是:
gn x y
foo 2.1 1.1
bar 3.1 4.4
qux 1.5 8.0
答案 0 :(得分:2)
你可以尝试
df_new = pd.DataFrame(npar_new, index = df.index, columns = df.columns)
x y
gn
foo 2.1 1.1
bar 3.1 4.4
qux 1.5 8.0
答案 1 :(得分:1)
使用.loc
分配值
df.loc[:,['x','y']]=ary
df
Out[849]:
gn x y
0 foo 2.1 1.1
1 bar 3.1 4.4
2 qux 1.5 8.0
更多信息
ary=np.array([[ 2.1, 1.1],
[ 3.1, 4.4],
[ 1.5, 8. ]])
由于您有更多列
df.loc[:,list(df.set_index("gn"))]=ary
答案 2 :(得分:0)
我无法理解你为什么要首先进行数组转换。这是一项授权吗?如果没有,这是一个纯粹的熊猫版本,可以一次完成所有操作 -
df = df + 1
因此,完整的代码将是 -
import numpy as np
import pandas as pd
x = [1.1,2.1,0.5]
y = [0.1,3.4,7]
gn = ['foo','bar','qux']
df = pd.DataFrame({'gn':gn, 'x':x, 'y':y})
df = df + 1