我有一个pandas dataFrame,它包含以下元素
146200 146218 146266 -1
146205 146203 -1 146234
146204 146207 -1 146300
我想重新格式化我的dataFrame,使其成为
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 :(得分: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
答案 1 :(得分: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]))