我有以下数据框:
import pandas as pd
import io
from scipy import stats
temp=u"""probegenes,sample1,sample2,sample3
1415777_at Pnliprp1,20,0.00,11
1415805_at Clps,17,0.00,55
1415884_at Cela3b,47,0.00,100"""
df = pd.read_csv(io.StringIO(temp),index_col='probegenes')
df
看起来像这样
sample1 sample2 sample3
probegenes
1415777_at Pnliprp1 20 0 11
1415805_at Clps 17 0 55
1415884_at Cela3b 47 0 100
我想要做的是执行row-zscore calculation using SCIPY。 使用此代码我得到:
In [98]: stats.zscore(df,axis=1)
Out[98]:
array([[ 1.18195176, -1.26346568, 0.08151391],
[-0.30444376, -1.04380717, 1.34825093],
[-0.04896043, -1.19953047, 1.2484909 ]])
如何方便地附加列和索引名称 再次结果呢?
在一天结束时。它看起来像是:
sample1 sample2 sample3
probegenes
1415777_at Pnliprp1 1.18195176, -1.26346568, 0.08151391
1415805_at Clps -0.30444376, -1.04380717, 1.34825093
1415884_at Cela3b -0.04896043, -1.19953047, 1.2484909
答案 0 :(得分:2)
documentation for pd.DataFrame
有:
数据:numpy ndarray(结构化或同类),dict或DataFrame Dict可以包含Series,数组,常量或类似列表的对象 索引:索引或类似数组 用于结果框架的索引。如果没有索引信息部分输入数据且没有提供索引,则默认为np.arange(n) 列:索引或类似数组 用于生成框架的列标签。如果没有提供列标签,则默认为np.arange(n)
所以,
pd.DataFrame(
stats.zscore(df,axis=1),
index=df.index,
columns=df.columns)
应该做的。
答案 1 :(得分:2)
你不需要scipy。你可以使用lambda函数来完成它:
>>> df.apply(lambda row: (row - row.mean()) / row.std(ddof=0), axis=1)
sample1 sample2 sample3
probegenes
1415777_at Pnliprp1 1.181952 -1.263466 0.081514
1415805_at Clps -0.304444 -1.043807 1.348251
1415884_at Cela3b -0.048960 -1.199530 1.248491