У меня есть DataFrame, из которого я хотел бы получить список всех имен столбцов, которые являются совокупными наивысшими по подмножеству данных. Я попробовал ответить на следующий вопрос , но получаю сообщение об ошибке. Я думаю, что это связано с добавленным столбцом «Победитель».
#!/usr/bin/env python3
import pandas as pd
raw_data = {'selection': ['A', 'B', 'C', 'D'],
'book_1': [4.0, 5.0, 6.0, 7.0],
'book_2': [4.0, 5.2, 6.2, 7.3],
'book_3': [3.9, 5.2, 6.4, 6.8]}
df = pd.DataFrame(raw_data, columns = ['selection', 'book_1', 'book_2', 'book_3'])
data_fields = ['book_1', 'book_2', 'book_3']
a = df[data_fields]
dftmp = a.eq(a.max(axis=1), axis=0)
print(dftmp)
df['winner'] = dftmp.mul(dftmp.columns.to_series()).apply(','.join, axis=1).str.strip(',')
print(df)
Это дает мне результат, который я ожидаю в терминах таблицы, и показывает «Истина» для столбцов, которые имеют ( Joint) наивысшее значение из данных, но теперь как я могу получить список этих столбцов в их собственный столбец в моем исходном фрейме данных?
Извините, если это неясно или требуется дополнительная информация, я будьте счастливы go более подробно / объясните больше, если необходимо. Спасибо!
book_1 book_2 book_3
0 True True False
1 False True True
2 False False True
3 False True False
Traceback (most recent call last):
File "/home/oddschecker-juice-finder/.venv/lib/python3.6/site-packages/pandas/core/ops/array_ops.py", line 149, in na_arithmetic_op
result = expressions.evaluate(op, str_rep, left, right)
File "/home/oddschecker-juice-finder/.venv/lib/python3.6/site-packages/pandas/core/computation/expressions.py", line 208, in evaluate
return _evaluate(op, op_str, a, b)
File "/home/oddschecker-juice-finder/.venv/lib/python3.6/site-packages/pandas/core/computation/expressions.py", line 70, in _evaluate_standard
return op(a, b)
numpy.core._exceptions.UFuncTypeError: ufunc 'multiply' did not contain a loop with signature matching types (dtype('<U6'), dtype('<U6')) -> dtype('<U6')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "./test.py", line 15, in <module>
df['winner'] = dftmp.mul(dftmp.columns.to_series()).apply(','.join, axis=1).str.strip(',')
File "/home/oddschecker-juice-finder/.venv/lib/python3.6/site-packages/pandas/core/ops/__init__.py", line 776, in f
self, other, pass_op, fill_value=fill_value, axis=axis, level=level
File "/home/oddschecker-juice-finder/.venv/lib/python3.6/site-packages/pandas/core/ops/__init__.py", line 620, in _combine_series_frame
new_data = dispatch_to_series(left, right, func, axis="columns")
File "/home/oddschecker-juice-finder/.venv/lib/python3.6/site-packages/pandas/core/ops/__init__.py", line 419, in dispatch_to_series
new_data = expressions.evaluate(column_op, str_rep, left, right)
File "/home/oddschecker-juice-finder/.venv/lib/python3.6/site-packages/pandas/core/computation/expressions.py", line 208, in evaluate
return _evaluate(op, op_str, a, b)
File "/home/oddschecker-juice-finder/.venv/lib/python3.6/site-packages/pandas/core/computation/expressions.py", line 70, in _evaluate_standard
return op(a, b)
File "/home/oddschecker-juice-finder/.venv/lib/python3.6/site-packages/pandas/core/ops/__init__.py", line 407, in column_op
return {i: func(a.iloc[:, i], b.iloc[i]) for i in range(len(a.columns))}
File "/home/oddschecker-juice-finder/.venv/lib/python3.6/site-packages/pandas/core/ops/__init__.py", line 407, in <dictcomp>
return {i: func(a.iloc[:, i], b.iloc[i]) for i in range(len(a.columns))}
File "/home/oddschecker-juice-finder/.venv/lib/python3.6/site-packages/pandas/core/ops/common.py", line 64, in new_method
return method(self, other)
File "/home/oddschecker-juice-finder/.venv/lib/python3.6/site-packages/pandas/core/ops/__init__.py", line 503, in wrapper
result = arithmetic_op(lvalues, rvalues, op, str_rep)
File "/home/oddschecker-juice-finder/.venv/lib/python3.6/site-packages/pandas/core/ops/array_ops.py", line 197, in arithmetic_op
res_values = na_arithmetic_op(lvalues, rvalues, op, str_rep)
File "/home/oddschecker-juice-finder/.venv/lib/python3.6/site-packages/pandas/core/ops/array_ops.py", line 151, in na_arithmetic_op
result = masked_arith_op(left, right, op)
File "/home/oddschecker-juice-finder/.venv/lib/python3.6/site-packages/pandas/core/ops/array_ops.py", line 112, in masked_arith_op
result[mask] = op(xrav[mask], y)
numpy.core._exceptions.UFuncTypeError: ufunc 'multiply' did not contain a loop with signature matching types (dtype('<U6'), dtype('<U6')) -> dtype('<U6')
Желаемый результат ...
book_1 book_2 book_3 winner
0 True True False book_1, book_2
1 False True True book_2, book_3
2 False False True book_3
3 False True False book_2