【问题标题】:How to Keep dtype('o') in df instead of bool如何在 df 而不是 bool 中保留 dtype('o')
【发布时间】:2019-10-02 11:15:38
【问题描述】:

我正在尝试将数据框中的 5 列组合成一列,其中包含字符串值,例如“A”或“B”。我已将 1 转换为 A、B、C ....

我目前的专栏是这样的

   A B C D E 
1  A
2      C
3  A
4
5        D
6
7          E
8
9          E
10  B         

我希望我的专栏看起来像这样

  Type
1  A
2  C
3  A
4
5  D
6
7  E
8
9  E
10 B 

但是,它返回 True 和 False 而不是 A、B、C..

下面列出了我的代码

dfparsed_A = dfparsed_groupby[(dfparsed_groupby['A'] == 1)]
dfparsed_B = dfparsed_groupby[(dfparsed_groupby['B'] == 1)]
dfparsed_C = dfparsed_groupby[(dfparsed_groupby['C'] == 1)]
dfparsed_D = dfparsed_groupby[(dfparsed_groupby['D'] == 1)]
dfparsed_E = dfparsed_groupby[(dfparsed_groupby['E'] == 1)]

dfparsed_['A'] = dfparsed_groupby['A'].astype(str).replace('1', 'A')
dfparsed_['B'] = dfparsed_groupby['B'].astype(str).replace('1', 'B')
dfparsed_['C'] = dfparsed_groupby['C'].astype(str).replace('1', 'C')
dfparsed_['D'] = dfparsed_groupby['D'].astype(str).replace('1', 'D')
dfparsed_['E'] = dfparsed_groupby['E'].astype(str).replace('1', 'E')

dfparsed2=[(dfparsed_groupby['A'] == 'A') | (dfparsed_groupby['B'] == 'B') | (dfparsed_groupby['C'] == 'C') |(dfparsed_groupby['D'] == 'D') | (dfparsed_groupby['E'] == 'E') ] 

print(dfparsed2)
...
 1203     True
 5368     True
 5644    False
 1089     True
 6488     True
 5651     True
 6485     True
 6237     True
 7632     True
 7637     True
 5635    False
 7445     True
 7484     True
 7492     True
 7638     True
 Length: 6362, dtype: bool]

【问题讨论】:

    标签: python pandas dataframe boolean


    【解决方案1】:

    用途:

    #if necessary
    #df = df.replace('', np.nan)
    df['Type'] = df.ffill(axis=1).iloc[:, -1]
    print (df)
          A    B    C    D    E Type
    1     A  NaN  NaN  NaN  NaN    A
    2   NaN  NaN    C  NaN  NaN    C
    3     A  NaN  NaN  NaN  NaN    A
    4   NaN  NaN  NaN  NaN  NaN  NaN
    5   NaN  NaN  NaN    D  NaN    D
    6   NaN  NaN  NaN  NaN  NaN  NaN
    7   NaN  NaN  NaN  NaN    E    E
    8   NaN  NaN  NaN  NaN  NaN  NaN
    9   NaN  NaN  NaN  NaN    E    E
    10  NaN    B  NaN  NaN  NaN    B
    

    如果每行所有 NaN 值中只有一个非 NaN 值:

    mask = df == 1
    df['Type'] = mask.dot(df.columns)
    print (df)
          A    B    C    D    E Type
    1     1  NaN  NaN  NaN  NaN    A
    2   NaN  NaN    1  NaN  NaN    C
    3     1  NaN  NaN  NaN  NaN    A
    4   NaN  NaN  NaN  NaN  NaN     
    5   NaN  NaN  NaN    1  NaN    D
    6   NaN  NaN  NaN  NaN  NaN     
    7   NaN  NaN  NaN  NaN    1    E
    8   NaN  NaN  NaN  NaN  NaN     
    9   NaN  NaN  NaN  NaN    1    E
    10  NaN    1  NaN  NaN  NaN    B
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      相关资源
      最近更新 更多