连接列值pandas数据框

2024-06-17 11:20:25 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,我有一个值的dateframe1,我想把它转换成一个新的dataframe2,通过连接原始dataframe1中列的值,即

dataframe1
ProductName  Value otherValue
Product1      2     5
Product2      3     2
Product1      1     5
Product3      4     7
Product3      5     7
Product1      5     5
Product2      9     2

dataframe2
ProductName  Value     otherValue
Product1      2 1 5       5
Product2      3 9         2
Product3      4 5         7

Tags: valueproduct1dataframe1productnamedataframe2dateframe1othervalueproduct3
2条回答

你可以用两行字试试这个。首先,我们需要将列Value转换为字符串,以便执行连接和操作,第二个是返回所需输出的所有操作:

import pandas as pd
import numpy as np 
df = pd.DataFrame(data={'ProductName':['Product1','Product2','Product1','Product3','Product3','Product1','Product2'],'Value':[2,3,1,4,5,5,9],'otherValue':[5,2,5,7,7,5,2]})
df['Value'] = df['Value'].astype(str)
df = df.merge(df.groupby('ProductName',as_index=True)['Value'].apply(' '.join).reset_index(),how='left',left_on='ProductName',right_on='ProductName').drop('Value_x',axis=1).drop_duplicates().rename(columns={'Value_y':'Value'})

打印(df) 输出:

  ProductName  otherValue   Value
0    Product1           5   2 1 5
1    Product2           2     3 9
3    Product3           7     4 5

您可以按ProductName分组,并使用Value上的' '.joinfirstotherValue上进行聚合:

result = df.assign().groupby('ProductName', as_index=False).agg({ 'Value' : lambda x : ' '.join(map(str, x)), 'otherValue' : 'first' } )

print(result)

输出

  ProductName  Value  otherValue
0    Product1  2 1 5           5
1    Product2    3 9           2
2    Product3    4 5           7

请注意,此解决方案假定列值不是字符串,否则可以直接使用' '.join

相关问题 更多 >