2015-11-12 2 views
1

У меня есть dataframe, который имеет два столбца 'a' и 'b'. Я хочу создать новый столбец, который будет иметь значение, полученное с помощью инструкции sql. Как я могу добиться того же в Панде.Создание новых столбцов на основе групповой и логической фильтрации

DF [ 'с'] = Выберите 'а', граф (случай, когда == 'B' 1, то 'а' еще нуль-конец) из ДФ группе 'а'

df = pd.DataFrame({'a':['a','a','b','a','b'], 'b' : [1,0,0,1,1]}) 
df = a b 
0  a 1 
1  a 0 
2  b 0 
3  a 1 
4  b 1 

Я попытался ниже

df['c'] = df.groupby('a').apply(lambda x : x[x['b']==1]['a'].count()).reset_index().ix[:,-1] 

но ошибались из положить

a b c 
0 a 1 2 
1 a 0 0 
2 b 0 NaN 
3 a 1 NaN 
4 b 1 NaN 
enter code here 

я ожидаю 2, NAN, NaN, 2,1 высоко оценят всю помощь и guidan се

ответ

0

Я хотел бы создать фиктивный столбец, чтобы сделать это:

In [11]: df["c"] = df["b"] == 1 

In [12]: df["c"] 
Out[12]: 
0  True 
1 False 
2 False 
3  True 
4 False 
Name: c, dtype: bool 

In [13]: df.groupby("a")["c"].sum() 
Out[13]: 
a 
a 2 
b 0 
Name: c, dtype: float64 

Это позволяет избежать применять так будет более эффективным.

Примечание: проверка равенства и суммирование булевых значений совпадает с подсчетом количества записей, которые равны.

Если вы хотите этот новый столбец с более на распространение информации Д.Ф., вы можете использовать преобразование:

In [14]: df.groupby("a")["c"].transform("sum") 
Out[14]: 
0 2 
1 2 
2 0 
3 2 
4 0 
dtype: float64 
+0

Привет Энди, Спасибо за вход. Он работает очень хорошо, но мне нужно много работать в подобной ситуации. Например, в одном из них мне нужно вычислить ранг, а не считать. Если вы хотите, я могу создать для вас другую должность. Я очень ценю вашу помощь в этом. –

+0

@piyushsharma задайте новый вопрос. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work Это говорит о том, что есть метод группового ранжирования, который делает именно это :) –

+0

Спасибо Andy, я выложу новый вопрос. Я знаю, что есть группа по рангу, но задача до сих пор заключается в том, чтобы объединить это с логическим оператором другого столбца, а затем применить ко всем строкам. Я действительно ценю твою помощь. –

 Смежные вопросы

  • Нет связанных вопросов^_^