Python 如何使用数据帧的列名称作为行上的值?
我有这个框架,两列(蓝色和红色)和值(0,1) 我想要一个这样的数据帧结果,如果列Red的值为1,那么用名称\u column Red替换这个1Python 如何使用数据帧的列名称作为行上的值?,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
**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