python - 可变数量列的多个条件
问题描述
我有一个熊猫数据框,有 2 个固定列和这两个列之后的可变列数。我需要更改第二列中的值,具体取决于其他列中的值。问题是我事先不知道我的数据框中会有多少额外的列,我需要设置一种灵活的方式来检查它们的值。
def validateAndSetSignals(self, signalsDf, datesReb):
totSignals = pd.DataFrame(0, columns = ['TOT_SIGNAL','TRADING_DAY'], index = self.unqDates)
for names in signalsDf.keys():
tmpSign = signalsDf[names].sum(axis =1)
totSignals[names] = tmpSign
totSignals['TOT_SIGNAL'] = totSignals['TOT_SIGNAL'] + tmpSign
for i in range (len(totSignals.columns) - 2):
totSignals.loc[totSignals[totSignals.columns[2:]] != 0, 'TRADING_DAY'] = 1
如您所见,'TOT_SIGNAL'
和'TRADING_DAY'
是固定列,而我可能有一个或多个,具体取决于一开始的 for 循环。然后我想检查至少一个附加列何时不同于 0,并将 column 设置为 1 'TRADING_DAY'
。
我遇到了麻烦,因为我无法创建特定条件,因为我事先不知道附加列的数量和名称。我尝试使用位置索引,因为它们都将在第二个之后,但它不起作用。有没有办法做到这一点?
解决方案
df = pd.DataFrame(index=range(8), columns = ['TOT_SIGNAL','TRADING_DAY']).join(pd.DataFrame(np.eye(8, 5)))
df.TRADING_DAY = df.TRADING_DAY.mask((df.iloc[:,2:] != 0).any(axis=1), 1)
结果:
TOT_SIGNAL TRADING_DAY 0 1 2 3 4
0 NaN 1 1.0 0.0 0.0 0.0 0.0
1 NaN 1 0.0 1.0 0.0 0.0 0.0
2 NaN 1 0.0 0.0 1.0 0.0 0.0
3 NaN 1 0.0 0.0 0.0 1.0 0.0
4 NaN 1 0.0 0.0 0.0 0.0 1.0
5 NaN NaN 0.0 0.0 0.0 0.0 0.0
6 NaN NaN 0.0 0.0 0.0 0.0 0.0
7 NaN NaN 0.0 0.0 0.0 0.0 0.0
推荐阅读
- javascript - Nodejs 滞后于时间戳
- sql-server - 如何在 SQL Server 中编写查询来捕获前一个月的数据?
- javascript - 为什么 CSS.escape 不按要求用 \\ 转义?
- sql - 如何将外键列移动到另一个表?
- c# - 如何使用友好名称而不是指纹获取 X509Certificate?
- javascript - 如何使用 javascript 扩展表数据?
- wpf - 设置在调整 WPF 应用程序大小时留在页脚区域中的页脚
- firebase - 从项目中删除 Firestore 数据库
- python - 使用值将字典分成多个列表
- swift - 使用 swift 在 Firestore 中创建子集合