d
содержит данные о запланированной и фактической продолжительности работы людей в часах в роли владельца или менеджера.
Обратите внимание, что один человек может, но не обязан, быть одновременно владельцем и менеджером.
Мне нужно переставить d
таким образом, чтобы все имена были в одном столбце и в других столбцах.
плановые и фактические часы в каждой роли.
Код ниже достигает этого, но не очень хорош.
Как я могу использовать некоторые встроенные функции Pandas для получения того же результата, но с меньшим набором текста?
import pandas as pd
d = {
'owner': ['mike', 'john', 'jake', 'lucy', 'mary', 'hans'],
'owner planned': [54, 67, 52, 19, 87, 45],
'owner actual': [12, 54, 3, 67, 84, 22],
'manager': ['andrew', 'tom', 'john', 'mike', 'hans', 'paul'],
'manager planned': [13, 432, 453, 765, 432, 234],
'manager actual': [22, 33, 44, 55, 66, 77],
}
df = pd.DataFrame(d)
names = list(set(df['owner'].tolist() + df['manager'].tolist()))
output = {}
for name in names:
op = df[df['owner'] == name]['owner planned'].sum()
oa = df[df['owner'] == name]['owner actual'].sum()
mp = df[df['manager'] == name]['manager planned'].sum()
ma = df[df['manager'] == name]['manager actual'].sum()
output.setdefault('owner_planned', []).append(op)
output.setdefault('owner_actual', []).append(oa)
output.setdefault('manager_planned', []).append(mp)
output.setdefault('manager_actual', []).append(ma)
output.setdefault('names', []).append(name)
df2 = pd.DataFrame(output)
print(df2)