我有一个列的数据框架,比如v1~v4
| _NAME | _TIMESTAMP | v0 | v1 | v2 | v3 | v4 |
|----------|---------------------|-------|------|-------|-------|-------|
| BRAKE_LH | 17-11-2021 22:50:43 | 13896 | 8262 | 12339 | 13110 | 13107 |
| BRAKE_LH | 17-11-2021 22:51:34 | 13896 | 8262 | 12339 | 13110 | 13107 |
| BRAKE_LH | 17-11-2021 22:51:35 | 13896 | 8262 | 12339 | 13110 | 13107 |
| BRAKE_LH | 17-11-2021 22:51:36 | 13896 | 8262 | 12339 | 13110 | 13107 |
| BRAKE_LH | 17-11-2021 22:51:37 | 0 | 0 | 0 | 0 | 0 | 如果我想对v1~v4列执行以下函数
df['v0'] = df['v0'].apply(lambda x: chr(round(x / 256)) + chr(x % 256)).apply(lambda x: x[::-1])
df['v1'] = df['v1'].apply(lambda x: chr(round(x / 256)) + chr(x % 256)).apply(lambda x: x[::-1])
df['v2'] = df['v2'].apply(lambda x: chr(round(x / 256)) + chr(x % 256)).apply(lambda x: x[::-1])
df['v3'] = df['v3'].apply(lambda x: chr(round(x / 256)) + chr(x % 256)).apply(lambda x: x[::-1])
df['v4'] = df['v4'].apply(lambda x: chr(round(x / 256)) + chr(x % 256)).apply(lambda x: x[::-1])在这种情况下,列超过4列,例如40或100列。
除了--> _NAME & _TIMESTAMP列之外,是否有一种简单的方法将其应用于所有列?
发布于 2021-11-18 19:07:59
您可以将列_NAME和_TIMESTAMP设置为.set_index()索引(以排除它们以供处理)。然后使用.applymap()在每一列上使用您的处理元素的公式。最后,通过_NAME和_TIMESTAMP将列.reset_index()还原为数据列,如下所示:
df.set_index(['_NAME', '_TIMESTAMP']).applymap(lambda x: chr(round(x / 256)) + chr(x % 256)).applymap(lambda x: x[::-1]).reset_index()结果:
_NAME _TIMESTAMP v0 v1 v2 v3 v4
0 BRAKE_LH 17-11-2021 22:50:43 H6 F 30 63 33
1 BRAKE_LH 17-11-2021 22:51:34 H6 F 30 63 33
2 BRAKE_LH 17-11-2021 22:51:35 H6 F 30 63 33
3 BRAKE_LH 17-11-2021 22:51:36 H6 F 30 63 33
4 BRAKE_LH 17-11-2021 22:51:37 发布于 2021-11-18 17:52:03
您可以将要忽略的列放在set,IGNORELIST = {'_NAME', '_TIMESTAMP'}中。
然后遍历列名并检查名称是否被忽略。如果不是,应用你的功能。
下面是一个例子
# df = ..your dataframe..
IGNORELIST = {'colname1', 'colname2'}
for colname in df.columns:
if not colname in IGNORELIST:
df[colname] = df[colname].apply(lambda x: chr(round(x / 256)) + chr(x % 256)).apply(lambda x: x[::-1])https://stackoverflow.com/questions/70024311
复制相似问题