2016-11-11 106 views
1

我有一个具有以下元素重置大熊猫数据框的值

一个大熊猫据帧
146200 146218 146266  -1 
146205 146203  -1 146234 
146204 146207  -1 146300 

我想格式化我的数据帧,使之成为

0 18 66 -1 
5 3 -1 34 
4 7 -1 100 

相应的起始值为146200,146201,146300,...0,1,100,...,不包括-1。那些系列就好像我没有弄错;我不只是确定如何使用pandas dataFrame来处理它们。在阅读我的数据框后,如下所示

import pandas as pd 
df=pd.read_csv('myfile.csv') 

我不确定如何转换它。

+0

是100实际上,我犯了一个错误 – user3841581

+0

好奇心:如果第一个元素是(而不是146200)-1,会发生什么? – FLab

+0

它将保持-1; -1应该保持不变。我想我们可以用模1462。 – user3841581

回答

1

您可以使用DataFrame.where

df = df.where(df == -1, df - 146200) 
print (df) 
    0 1 2 3 
0 0 18 66 -1 
1 5 3 -1 34 
2 4 7 -1 100 
0

这里是一个可能的实现:

import pandas as pd 

df = pd.DataFrame([[146200, 146218, 146266,  -1], 
        [146205, 146203,  -1, 146234], 
        [146204, 146207,  -1, 146300]]) 

# leave -1 unchanged otherwise subtract a number "base" from the element 
def my_transf(x, base): return x-base if x != -1 else x 

# Apply the transformation above to each element of the dataframe    
transformed = df.applymap(lambda x: my_transf(x, df.iloc[0,0]))