首页 > 解决方案 > 如何使用 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

先感谢您。

标签: pythonpandasdataframematrix

解决方案


您可以通过执行以下操作循环完成此任务。它遍历每一列,不包括要写入数据的第一列。获取值为 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]

推荐阅读