python - 如何将公式应用于 Dataframe 熊猫中的所有列
问题描述
我有以下数据框:
import pandas as pd
data = {'MA1': [ float("nan"), float("nan"), -1, 1],
'MA2': [ float("nan"), -1, 0, 0],
'MA3': [ 0, 0, 1, -1]}
df_input = pd.DataFrame(data, columns=['MA1', 'MA2', 'MA3'])
我的目标是对于每一列,如果第一个非 nan 和非零值是 -1,则将其设置为 0。
澄清:
如果第一个非 0 和非 nan 值为 -1,则目标仅设置为 0。如果它是 1 或其他任何值,则将其留在那里。
最快的方法是什么?
解决方案
DataFrame.loc
当第一个有效值为 时,您可以遍历列并使用分配 0 -1
:
dft = df_input.replace(0, np.NaN)
for col in df_input.columns:
idxmin = dft[col].idxmin()
if df_input.loc[idxmin, col] == -1:
df_input.loc[idxmin, col] = 0
MA1 MA2 MA3
0 NaN NaN 0
1 NaN 0.0 0
2 0.0 0.0 1
3 1.0 0.0 0
或者通过使用来提高效率,DataFrame.idxmin
这样我们就不必Series.idxmin
在循环中调用每次迭代:
dft = df_input.replace(0, np.NaN).idxmin()
for col, idx in dft.iteritems():
if df_input.loc[idx, col] == -1:
df_input.loc[idx, col] = 0
MA1 MA2 MA3
0 NaN NaN 0
1 NaN 0.0 0
2 0.0 0.0 1
3 1.0 0.0 0
推荐阅读
- android - 如何确定在移动文件夹中选择的数据是视频还是图像?
- python - Pandasql:Python int 太大而无法转换为 SQLite INTEGER
- javascript - 音频播放减慢游戏速度
- python - 将按钮重置为原始文本pyqt5
- python - 如何使用 pyspark 数据框读取固定字段文件并将其插入数据库?
- unit-testing - 如何存根方法的回调?
- github-api - Github 应用程序不会重定向到 Github Enterprise 中的回调 url
- regex - 替换 HEX 文件的最后一次出现 - Perl Regex
- html - Vue href 与静态 url 绑定
- databricks - 在 Azure Purview 中扫描 Delta 表时未创建沿袭