Как я могу подсчитать числа больше 0 в части строки столбцов в кадре данных и сохранить их в столбце - PullRequest
1 голос
/ 21 июня 2020

введите описание изображения здесь

Я хочу подсчитать количество столбцов, которые имеют значение больше 0 по строкам для указанного c столбца, выбранного как

понедельник, вторник, среда, четверг, пятница, суббота, воскресенье и сохраните его в отдельном столбце

например, количество строк в id_recipient 0 равно 2: (monday,saturday), для id_recipient 1 также будет 2: (monday, tuesday) et c.

Ответы [ 4 ]

4 голосов
/ 21 июня 2020

Мы можем использовать DataFrame.ne, что означает not equal и DataFrame.sum по оси столбца (axis=1).

Я предполагал, что ваш фрейм данных называется df

import pandas as pd

columns = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']
df['count'] = df[columns].ne(0).sum(axis=1)
1 голос
/ 21 июня 2020

Вот мое решение:

dict = {'ID_recipient':[0, 1, 2, 3, 4], 
        'monday': [13, 10, 9, 12, 9], 
        'tuesday':[0, 1, 0, 1, 0],
        'wednesday':[0,0,0,0,1],
        'thursday':[0,0,0,0,0],
        'friday':[0,0,0,0,0],
        'saturday':[1,0,1,0,0],
        'sunday':[0,0,0,0,0]} 
  
df = pd.DataFrame.from_dict(dict) 
  
df

Чтобы настроить следующий DataFrame: enter image description here

Now I create a list of all the days of week columns:

daysofweek = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday',
              'saturday', 'sunday']

Now I create a new column that sums up the logical value for all days of week columns across all rows (vectorised so it's much quicker that using e.g. .iterrows() )

df['No_rows'] = (test_df[daysofweek] > 0).sum(axis=1)

This gives me the correct output as you desired:

введите описание изображения здесь

Надеюсь, это поможет!

0 голосов
/ 21 июня 2020

Мы использовали applymap с функцией на лету, если x> 0, чем 1, иначе 0. Мы суммировали его по оси 1 и поместили в новый столбец 'count'

import pandas as pd

columns = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']
df['count'] = df[columns].applymap(lambda x : 1 if x > 0 else 0).values.sum(axis=1)
0 голосов
/ 21 июня 2020

Вы можете сделать это в одной строке просто так:

df['count'] = [len(list(filter(list(df['monday', 'tuesday', 'wednesday', 'thursday','friday','saturday','sunday'].iloc[x]), lambda y: y > 0))) for x in range(len(df['monday']))]

Надеюсь, это поможет :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...