#python-3.x #pandas #dataframe
#python-3.x #pandas #фрейм данных
Вопрос:
Один из моих фреймов данных содержит столбцы
WR K ID
SP-RS-001 K001
SP-RS-001 K002
SP-RS-001 K006
SP-RS-002 K002
SP-RS-002 K007
SP-RS-002 K008
а у другого есть [ПРАВИТЬ]
U Code CO Code K ID
C001 C001.01 K001
C001 C001.02 K002
C001 C001.03 K006
C002 C002.01 K001
C002 C002.02 K006
Мне нужен другой столбец в этом фрейме данных, который дает
U Code K ID WR
C001 K001, K002, K006 SP-RS-001, SP-RS-002
C002 K001, K006 SP-RS-001
C003 K002, K007 SP-RS-001, SP-RS-002
Как я могу это сделать? Спасибо! 🙂
Комментарии:
1.
K001, K002, K006
это одна строка или список строк?2. @suicidalteddy Это объединенная строка, основанная на группировке столбца. Я использовал
.groupby('col_name').agg({'K ID' : ', '.join})
3. @harry04 можете ли вы предоставить фрейм данных, из которого он был получен? Было бы проще выполнить слияние и groupby за один шаг
4. @user3483203 внес правку в приведенную выше таблицу. Вот как это выглядело изначально.
Ответ №1:
Прежде всего, я предполагаю, что запись C003 была ошибкой (в вашем первоначальном вопросе), я полагаю, что для вас сработает следующее. Не было очевидно, какой тип слияния вы хотели, поэтому я предположил внутреннее слияние.
Загрузить фрейм данных:
df1 = pd.DataFrame({'WR': ['SP-RS-001', 'SP-RS-001', 'SP-RS-001', 'SP-RS-002', 'SP-RS-002', 'SP-RS-002'],
'K_ID': ['K001', 'K002', 'K006', 'K002', 'K007', 'K008']})
df2 = pd.DataFrame({'U_Code': ['C001', 'C001', 'C001', 'C002', 'C002'],
'C0_Code': ['C001.01', 'C001.02', 'C001.03', 'C002.01', 'C002.02'],
'K_ID': ['K001', 'K002', 'K006', 'K001', 'K006']})
Слияние по K_ID:
df = df2.merge(df1, on='K_ID', how='inner')[['U_Code', 'K_ID', 'WR']]
Это дает нам:
и, наконец, groupby в U_CODE со следующей агрегирующей функцией:
def f(x):
return pd.Series(dict(K_ID = ', '.join(x['K_ID'].unique()),
WR = ', '.join(x['WR'].unique())))
df = df.groupby(['U_Code']).apply(f)
Что дает нам:
Надеюсь, это поможет.
Комментарии:
1. С некоторыми изменениями в словаре в
f(x)
у меня это сработало! Спасибо! 🙂
Ответ №2:
Я думаю, вы ищете это:
df3 = df1.merge(df2, on = 'K ID')
df4 =df3.groupby('U Code')['K ID','WR'].agg({'K ID': lambda x: ','.join(x), 'WR': lambda x: ','.join(x)})