python - 如何使用 pandas 在 python 上匹配矩阵上的值?
问题描述
我正在尝试使用 pandas 数据框匹配 python 上的矩阵中的值。也许这不是最好的表达方式。
假设您有以下数据集:
import pandas as pd
d = {'stores':['','','','',''],'col1': ['x','price','','',1],'col2':['y','quantity','',1,''], 'col3':['z','',1,'',''] }
df = pd.DataFrame(data=d)
stores col1 col2 col3
0 NaN x y z
1 NaN price quantity NaN
2 NaN NaN Nan 1
3 NaN NaN 1 NaN
4 NaN 1 NaN NaN
我正在尝试获得以下信息:
stores col1 col2 col3
0 NaN x y z
1 NaN price quantity NaN
2 z NaN Nan 1
3 y NaN 1 NaN
4 x 1 NaN NaN
任何想法这可能如何工作?我试过在列表上运行循环,但我不太确定该怎么做。
这是我到目前为止所拥有的,但它很糟糕(而且显然不起作用),我确信有一种更简单的方法可以做到这一点,但我就是无法理解它。
stores = ['x','y','z']
for i in stores:
for v in df.iloc[0,:]:
if i==v :
df['stores'] = i
它产生以下结果:
stores col1 col2 col3
0 z x y z
1 z price quantity NaN
2 z NaN NaN 1
3 z NaN 1 NaN
4 z 1 NaN NaN
先感谢您。
解决方案
您可以通过执行以下操作循环完成此任务。它遍历每一列,不包括要写入数据的第一列。获取值为 1 的索引值,并将第一行中的值写入“存储”列。
请注意您可能在多行中有 1,在这种情况下,它将用具有 1 值的最后一列填充 stores 列。
for col in df.columns[1:]:
index_values = df[col][df[col]==1].index.tolist()
df.loc[index_values, 'stores'] = df[col][0]
推荐阅读
- node.js - 是否可以使用 Node.js 将地图直接保存到磁盘?
- javascript - *可能的未处理承诺拒绝(id:0):类型错误:未定义不是对象(评估'result.cancelled')云图像上传
- node.js - 为 Node.js 和 React.js 部署到 App Engine 设置 app.yaml 文件
- javascript - Web Bluetooth Api - 为什么我无法检测到移动蓝牙
- javascript - 点击标签时防止默认
- python - 无法让格式函数在 python 中工作
- swift - SQLite.Swift:为值不为空的列值获取空值
- javascript - :hover 和 :focus 效果上 flex 内容和边框之间的像素高间隙
- ios - iOS 崩溃 GameObject::IsActive() 常量
- vue.js - 如何合并数组Vue.js中的两个元素