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