在特定位置使用公共密钥连接值

时间:2018-04-17 17:09:23

标签: python pandas dataframe pandas-groupby

我试图找到一种方法来将共享公共密钥的值(在下面的示例中,它将是ID)连接到数据框中的指定位置。

我从哪里开始:

df1 = pd.DataFrame({"ID" : ["x13", "x13", "", "x14", "" , "x13"], "Name":"Master1", "Slave1", "Master2", "Master3", "Master4" , "Slave2"],"value":["", "5", "7", "8", "", "1"]})

输出符合预期:

ID     Name      value
0  x13  Master1
1  x13   Slave1     5
2       Master2     7
3  x14  Master3     8
4       Master4
5  x13   Slave2     1

我想要达到的目标是:

ID     Name      value
0  x13  Master1     5,1
1  x13   Slave1     5
2       Master2     7
3  x14  Master3     8
4       Master4
5  x13   Slave2     1

用语言:我想遍历数据框并找到所有非空ID。当发现我想加入列表中具有公共ID的所有值,并将其存储在该特定ID的主服务器上的数据帧中。

我所有的解决方案尝试都以循环循环结束......

我确信该解决方案与pandas的groupby功能有关,但我无法获得所需的输出。

1 个答案:

答案 0 :(得分:0)

一种方法是使用groupby,然后通过掩码映射系列:

df = pd.DataFrame({"ID" : ["x13", "x13", "", "x14", "" , "x13"],
                   "Name": ["Master1", "Slave1", "Master2", "Master3", "Master4" , "Slave2"],
                   "value":["", "5", "7", "8", "", "1"]})

s = df[(df.ID != '') & (df.value != '')].groupby('ID')['value'].apply(list)

mask = df['ID'].isin(s.index) & df['Name'].str.startswith('Master')
df.loc[mask, 'value'] = df.loc[mask, 'ID'].map(s).apply(lambda x: ', '.join(x))

print(df)

#     ID     Name value
# 0  x13  Master1  5, 1
# 1  x13   Slave1     5
# 2       Master2     7
# 3  x14  Master3     8
# 4       Master4      
# 5  x13   Slave2     1