我有一个代码将更改应用于数据集,然后下一个单元格选择它以继续进行另一组更改。这样做是为了我自己在数据处理中的可读性和故障排除。
我想我完成了代码并希望将其应用于初始数据。Ipython notebook 有一个选项运行所有单元。
我的问题是它是一个接一个运行还是同时运行?
我目前有一个如下所示的数据框:
Idnumber Ownership Date
1 100 2006
2 >50 2006
1 80 2007
3 NaN 2006
Run Code Online (Sandbox Code Playgroud)
所有权列当前为浮动类型。我想要的是在 idnumber 上创建一个 groupby 函数,该函数返回每个 Idnumber 的最大值。问题是,对于 > < 或 ± 之类的东西,这是不可能的(错误:无法排序的类型:float() >= str())。
df['Ownership'] = df['Ownership'].astype(str)
df['Ownership'] = df['Ownership'].map(lambda x: x.strip('± = > + <'))
df['Ownership'] = df['Ownership'].astype(float).fillna(0.0)
df['Ownershipadjusted']= df['Ownership'].groupby([df['Idnumber'],df['Ownership']]).max()
Run Code Online (Sandbox Code Playgroud)
实际上不会工作,因为将其转换回浮点数会产生错误:无法将字符串转换为浮点数。
df['Ownership'] = df['Ownership'].apply(pd.to_numeric, errors='coerce')
Run Code Online (Sandbox Code Playgroud)
也没有达到要求的效果。是否有一些更直接的方法可以从浮点数中删除符号,或者使这种转换有效?
为了避免混淆,这就是我需要的:
Idnumber Ownership Date Ownership adjusted
1 100 2006 100
2 50 2006 50
1 80 2007 100
3 0 2006 0
Run Code Online (Sandbox Code Playgroud)
当然,数据框包含的观察值远不止 4 个
如果该列中的值等于字符串,我试图将另一列替换为另一列.这个字符串的值是"wo".如果在y列中显示,则替换为x列.目前我使用以下代码:
df.y.replace("wo",df.x)
Run Code Online (Sandbox Code Playgroud)
这种情况持续很长时间(数百万次观察,相当于几天的计算).
有更有效的替代方法吗?
以防万一,数据如下:
y x other variables
1 mo something
2 2 something
3 3 something
wo >5 something
4 4 something
wo 7 something
Run Code Online (Sandbox Code Playgroud)
它必须看起来像:
y x other variables
1 mo something
2 2 something
3 3 something
>5 >5 something
4 4 something
7 7 something
Run Code Online (Sandbox Code Playgroud)