Создание вычисляемого столбца из других столбцов в кадре данных - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь создать производный столбец в кадре данных pandas и получаю следующую ошибку.

if df['a'] > 0:
    df['c'] = df['a']
if df['b'] > 0:
    df['c'] = min(df['a'],df['b'])

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-17-00945ffeddda> in <module>()
----> 1 if df['a'] > 0:
      2     df['c'] = df['a']
      3 if df['b'] > 0:
      4     df['c'] = min(df['a'],df['b'])

/opt/python/python35/lib/python3.5/site-packages/pandas/core/generic.py in __nonzero__(self)
   1574         raise ValueError("The truth value of a {0} is ambiguous. "
   1575                          "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
-> 1576                          .format(self.__class__.__name__))
   1577 
   1578     __bool__ = __nonzero__

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Вы можете попробовать np.where :

df['c'] = np.where(df['a'] > 0, df['a'], df['c'])
df['c'] = np.where(df['b'] > 0, df[['a', 'b']].min(axis = 1), df['c'])
0 голосов
/ 18 ноября 2018

Я предлагаю использовать numpy.select, а для строк с возвращенным False для обеих логических масок использовать параметр default, например. скаляр 0:

df = pd.DataFrame({
         'a':[-4,5,-4,5,5,4],
         'b':[7,-8,-9,4,2,3],
})

mask1 = df['a'] > 0
mask2 = df['b'] > 0

df['c'] = np.select([mask1, mask2], 
                    [df['a'], df[['a', 'b']].min(axis=1)], 
                    default=0)
print (df)
   a  b  c
0 -4  7 -4
1  5 -8  5
2 -4 -9  0
3  5  4  5
4  5  2  5
5  4  3  4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...