python - 如何在 df 中保留 dtype ('o' ) 而不是 bool

标签 python pandas dataframe boolean

我正在尝试将数据框中的 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]

最佳答案

用途:

#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

关于python - 如何在 df 中保留 dtype ('o' ) 而不是 bool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58200376/

相关文章:

python - pandas read_csv路径问题

python - 如果 df 记录是英文的,则使用 python 将其移动到另一列

python - 遍历 Pandas Dataframe 中定义的日期时间索引范围

python - 有没有关于 python-purple 的例子?

python - Keras 二元分类 - Sigmoid 激活函数

python - 如何在 Jupyter notebook 中嵌入 gif?

python - pandas 中的花式索引

python - 基于列的条件 cumsum

python - 在 Pandas 中将一个 Excel 文件拆分为多个具有特定行数的文件

python - AsyncHTTPClient 阻止我的 Tornado IOLoop