Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用数据帧的列名称作为行上的值?_Python_Pandas_Dataframe - Fatal编程技术网

Python 如何使用数据帧的列名称作为行上的值?

Python 如何使用数据帧的列名称作为行上的值?,python,pandas,dataframe,Python,Pandas,Dataframe,我有这个框架,两列(蓝色和红色)和值(0,1) 我想要一个这样的数据帧结果,如果列Red的值为1,那么用名称\u column Red替换这个1 **Blue Red** 0 Red Blue Red 我可以用“for”来做,但是,你知道另一种方法吗? 谢谢使用apply功能更有效。我正在使用astype(object),因此我可以使用replace功能: import pandas as pd df = pd.DataFrame([[0, 1], [1, 0]], co

我有这个框架,两列(蓝色和红色)和值(0,1)

我想要一个这样的数据帧结果,如果列Red的值为1,那么用名称\u column Red替换这个1

**Blue   Red**
   0    Red
 Blue   Red
我可以用“for”来做,但是,你知道另一种方法吗?
谢谢

使用
apply
功能更有效。我正在使用
astype(object)
,因此我可以使用
replace
功能:

import pandas as pd
df = pd.DataFrame([[0, 1], [1, 0]], columns=['**Blue', 'Red**'])

df = df.apply(lambda x: x.astype(object).replace(1, x.name.replace("**", '')))
print(df)

一种方法是将
df
与相同形状的数组相乘:

df * np.broadcast_to(df.columns.values, df.shape)

这会使所有单元格中都有字符串


另一种解决方案是对每一列使用
where

df.apply(lambda s: s.where(s.eq(0), s.name))
这会让你最终变成混血儿



作为一般的经验法则,最好为每列使用单类型数组。

您可以调用此函数,也许它可以帮助您:

def func(val):
    if (val==1):
        return "red"
    else:
        return 'Blue'
val=int(input())
print(func(val))

使用
np.where

df1 = pd.DataFrame(np.where(df.eq(1), df.columns, df), columns=df.columns)
打印(df1)


很好,
df*np.broadcast\u to(np.where(df.eq(1),df.columns,df),df.shape)
如果有更复杂的条件也可以使用。谢谢,但是如果我有50个列,这对我不起作用,使用apply函数更好。但我听说了你,谢谢:)
def func(val):
    if (val==1):
        return "red"
    else:
        return 'Blue'
val=int(input())
print(func(val))
df1 = pd.DataFrame(np.where(df.eq(1), df.columns, df), columns=df.columns)
   Blue  Red
0     0  Red
1  Blue  Red