我在将R代码示例转换为脚本时遇到了麻烦,并且想知道如何实现。
product_df <- example_df[,paste(name, collapse="_"),by=product_id]
我在上一个SO问题上找到了此代码段,但这只是将所有内容连接在一起,而不是通过特定的ID。
import functools
def reduce_concat(x, sep=""):
return functools.reduce(lambda x, y: str(x) + sep + str(y), x)
def paste(*lists, sep=" ", collapse=None):
result = map(lambda x: reduce_concat(x, sep=sep), zip(*lists))
if collapse is not None:
return reduce_concat(result, sep=collapse)
return list(result)
这是在下面生成原始数据框的代码
example_df = pd.DataFrame({'product_id': ['100_1244', '100_1244', '100_1244', '100_1244', '200_1244', '200_1244', '200_1244', '200_1244'],
'name': ['apple', 'apple', 'apple', 'apple', 'orange', 'orange', 'orange', 'orange']})
product_id name
0 100_1244 apple
1 100_1244 apple
2 100_1244 apple
3 100_1244 apple
4 200_1244 orange
5 200_1244 orange
6 200_1244 orange
7 200_1244 orange
我希望它看起来像这样:
product_id name
0 100_1244 apple_apple_apple_apple
1 200_1244 orange_orange_orange_orange
答案 0 :(得分:1)
您可以使用groupby
example_df.groupby('product_id').name.apply('_'.join).reset_index()
product_id name
0 100_1244 apple_apple_apple_apple
1 200_1244 orange_orange_orange_orange
答案 1 :(得分:1)
将groupby
与join
一起使用
df.groupby('product_id').apply(lambda x: '_'.join(x['name']))
product_id
100_1244 apple_apple_apple_apple
200_1244 orange_orange_orange_orange