#python #pandas
Вопрос:
У меня есть набор данных с тремя столбцами:
Name Customer Value
Johnny Mike 1
Christopher Luke 0
Christopher Mike 0
Carl Marilyn 1
Carl Stephen 1
Мне нужно создать новый набор данных, в котором у меня есть два столбца: один с уникальными значениями из Name
Customer
столбцов и и Value
столбец. Значения в Value
столбце были присвоены Name
(это означает, что несколько строк с одинаковыми Name
значениями имеют одинаковое значение: у Карла значение 1, у Кристофера значение 0, а у Джонни значение 1), поэтому Customer
элементы должны иметь пустые значения в Value
столбце в новом наборе данных.
Мой ожидаемый результат таков
All Value
Johnny 1
Christopher 0
Carl 1
Mike
Luke
Marilyn
Stephen
Для уникальных значений в All
столбце я рассматриваю unique().to_list()
как Name
и Customer
:
name = file['Name'].unique().tolist()
customer = file['Customer'].unique().tolist()
all_with_dupl = name customer
customers=list(dict.fromkeys(all_with_dupl))
df= pd.DataFrame(columns=['All','Value'])
df['All']= customers
Я не знаю, как присвоить значения в новом наборе данных после создания списка со всеми именами и клиентами без дубликатов.
Любая помощь была бы очень кстати.
Ответ №1:
Разделите столбцы и .drop_duplicates
фрейм данных, чтобы удалить дубликаты, а затем append
верните их обратно:
(df.drop('Customer', 1)
.drop_duplicates()
.rename(columns={'Name': 'All'})
.append(
df[['Customer']].rename(columns={'Customer': 'All'})
.drop_duplicates(),
ignore_index=True
))
All Value
0 Johnny 1.0
1 Christopher 0.0
2 Carl 1.0
3 Mike NaN
4 Luke NaN
5 Marilyn NaN
6 Stephen NaN
Или разделить ступеньки вверх:
names = df.drop('Customer', 1).drop_duplicates().rename(columns={'Name': 'All'})
customers = df[['Customer']].drop_duplicates().rename(columns={'Customer': 'All'})
names.append(customers, ignore_index=True)
Ответ №2:
Другим способом
d=dict(zip(df['Name Customer'].str.split('s').str[0],df['Value']))#Create dict
df['Name Customer']=df['Name Customer'].str.split('s')
df=df.explode('Name Customer').drop_duplicates(keep='first').assign(Value='')Explode dataframe and drop duplicates
df['Value']=df['Name Customer'].map(d).fillna('')#Map values back