python - 为引用/查找数据框中存在的行更新数据框中的列
问题描述
我有一个数据框,其中一些数据的缩放比例不正确,所以我需要对 4 列应用校正计算,如果该行/值存在于参考数据框中
df:
devicename| val1 | val2 | val3 | val4 | val5 | val6 |
=============================================================================
dev1 100 200 300 400 500 600
dev2 200 300 400 500 600 700
sig_ref:
devicename|signalname
=======================
dev1 val1
dev1 val3
dev1 val5
因此,对于 sig_ref 中的每个设备/值,我需要使用该设备在 df 中找到所有行,并将 df[signalname] 除以 10。在下面的示例中,最终结果将是 df dev1.val1=10, val3= 30,val5=50,等等。
我做了什么:
sig_ref = pd.read_csv('./Signals.csv')
df = pd.read_parquet(file)
for index, row in sig_ref.iterrows():
print('Finding: ', row['devicename'], row['signalname'])
sig = (row['signalname']).lower()
print(sig)
df.loc[df['devicename'] == row['devicename']][sig]/10
我也尝试了一个令人费解的“isin”,但不知道如何从参考数据帧中选择信号名
解决方案
您可以尝试melt
then merge
,修改值,然后转回:
(df.melt('devicename', var_name='signalname')
.merge(sig_ref, indicator=True, how='left')
.assign(value = lambda x: np.where(x['_merge']=='both', x['value']/10, x['value'])
)
.pivot(index='devicename', columns='signalname', values='value')
)
输出:
signalname val1 val2 val3 val4 val5 val6
devicename
dev1 10.0 200.0 30.0 400.0 50.0 600.0
dev2 200.0 300.0 400.0 500.0 600.0 700.0
推荐阅读
- python - 从文本字典中访问值
- javascript - 悬停在按钮上时如何显示和关闭消息模式
- java - 并非所有字节都从 S3ObjectInputStream 中读取,正在中止 HTTP 连接 警告
- java - 以编程方式在屏幕上绘制矢量可绘制/SVG
- matlab - matlab:沿未使用的维度添加符号矩阵
- javascript - 如何在javascript中生成集合字符串
- jquery - 如何使我的 jQuery 倒计时代码工作
- angularjs - 使用 lodash _find 返回 true 或 false
- html - 使拆分布局响应(Bootstrap4)
- compiler-construction - 如何修复生成的 llvm 字节码中的分段错误?