【问题标题】:Map/Swap Values in Python PandasPython Pandas 中的映射/交换值
【发布时间】:2021-06-11 01:37:54
【问题描述】:

对于每一列,需要找到它的平均值,如果值大于平均值,则将列值替换为 1,如果值小于平均值,则替换为 -1。最后,返回转换后的数据框,其列和索引与原始数据框相同。

  Column 1   Column 2 Column 3 Column 4 Column 5 Column6
1    2          0       0        0         0        0           
2    0          0       0        0         0        0
3    0          1       1        2         1        1


Expected output:

  Column 1   Column 2 Column 3 Column 4 Column 5 Column6
1     1         -1       -1        -1      -1       -1           
2    -1         -1       -1        -1      -1       -1 
3    -1          1        1         1       1        1


code so far:
import pandas as pd
def mapvalues(filename):
    mylist=[]
    data=pd.read_csv(filename)
    length=data.shape[0]
    width=data.shape[1]
    for i in range(3):
        columns=data.iloc[:,i]
        average=columns.mean()
        for j in columns:
            if j > average:
                mylist.append(1)
                
            else:
                mylist.append(-1)
    return(ListOfLists)
        
 mapvalues(path)

我曾想过将这些值附加到列表列表中([[1,-1,-1],[-1,-1,1]]),然后将其转换为数据框,但我无法制作该列表。

任何见解都将受到高度赞赏。

【问题讨论】:

    标签: python-3.x pandas list numpy


    【解决方案1】:

    使用df.mean() 获取平均值,使用gt 进行比较,然后进行一些数学运算:

    out = 2 * df.gt(df.mean()) - 1
    
    # also
    # out = 2 * (df > df.mean()) - 1
    

    输出:

       Column 1  Column 2  Column 3  Column 4  Column 5  Column6
    1         1        -1        -1        -1        -1       -1
    2        -1        -1        -1        -1        -1       -1
    3        -1         1         1         1         1        1
    

    【讨论】:

    • 成功了!谢啦。显然我还有很长的路要走。
    猜你喜欢
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 2019-07-18
    相关资源
    最近更新 更多