我想在python中将dataframe的值替换为列名。我该怎么做?

2024-09-30 22:20:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用loop转换以下值。你知道吗

        {'Id':2, 'A':"no", 'B':"no", 'C':"no", 'D':"yes"},
        {'Id':3, 'A':"yes", 'B':"yes", 'C':"yes", 'D':"no"},
        {'Id':4, 'A':"yes", 'B':"no", 'C':"yes", 'D':"no"},
        {'Id':5, 'A':"no", 'B':"yes", 'C':"no", 'D':"yes"}]

https://ibb.co/7NL69BY(链接到数据帧)

我用“map”表示单独的行。但我想循环一下。你知道吗

df['B'] = df['B'].map({"yes": "B", "no": "-"})
df['C'] = df['C'].map({"yes": "C", "no": "-"})
df['D'] = df['D'].map({"yes": "D", "no": "-"})

(链接到结果)https://ibb.co/JsJjqZr 请帮我用线圈。你知道吗


Tags: 数据nohttpsloopidmapdf链接
2条回答

您可以使用此解决方案:

import pandas as pd
x = pd.DataFrame([{'Id':2, 'A':"no", 'B':"no", 'C':"no", 'D':"yes"}, 
           {'Id':3, 'A':"yes", 'B':"yes", 'C':"yes", 'D':"no"}, 
           {'Id':4, 'A':"yes", 'B':"no", 'C':"yes", 'D':"no"}, 
           {'Id':5, 'A':"no", 'B':"yes", 'C':"no", 'D':"yes"}])  
x.set_index('Id')
headers = x.columns.to_list()
for col in headers:
    x[col] = x[col].map({"yes":col, "no":"-"}) 

试试这个。。你知道吗

这是从linked post借用的

数据帧示例:

>>> df
      A    B    C    D
Id
2    no   no   no  yes
3   yes  yes  yes   no
4   yes   no  yes   no
5    no  yes   no  yes

解决方案:

>>> df.loc[:, 'A':'D'].replace('yes', pd.Series(df.columns, df.columns)).replace('no', '-')
    A  B  C  D
Id
2   -  -  -  D
3   A  B  C  -
4   A  -  C  -
5   -  B  -  D

另一个解决方案是@–Quang Hoang提到的。。你知道吗

>>> for col in 'ABCD':
...   df[col] = df[col].map({'yes':col, 'no':'-'})
...
>>> df
    A  B  C  D
Id
2   -  -  -  D
3   A  B  C  -
4   A  -  C  -
5   -  B  -  D

或者

>>> for cell in df[['A','B','C','D']].columns:
...     df[cell].replace({'yes':col, 'no':'-'}, inplace=True)
...
>>> df
    A  B  C  D
Id
2   -  -  -  D
3   D  D  D  -
4   D  -  D  -
5   -  D  -  D

相关问题 更多 >