我有这样一个df:
ID Cluster Product
1 4 'b'
1 4 'f'
1 4 'w'
2 7 'u'
2 7 'b'
3 5 'h'
3 5 'f'
3 5 'm'
3 5 'd'
4 7 's'
4 7 'b'
4 7 'g'
其中ID是另一个df的主键和唯一键,该df是此df的源。集群不是密钥,不同的ID通常具有相同的集群值;不管怎么说,这是我必须掌握的信息。
我想获得的是这个数据框:
ID Cluster Product_List_by_ID
1 4 ['b','f','w']
2 7 ['u','b']
3 5 ['h','f','m','d']
4 7 ['s','b','g']
如果这是不可能的,像这样的字典也可以:
d = {ID:[1,2,3,4], Cluster:[4,7,5,7],
Product_List_by_ID:[['b','f','w'],['u','b'],['h','f','m','d'],['s','b','g']]}
我试过很多方法都没有成功。。似乎无法将列表作为数据帧值插入。。无论如何,我认为以某种巧妙的方式进球应该不会那么困难。。对不起,如果我想不起来了,但我对编码是新手
有什么建议吗?!谢啦
另一个解决方案是首先删除'
从列产品
如果需要通过str.strip
:
df.Product = df.Product.str.strip("'")
然后Groupby
与应用
,最后如果需要字典
使用to_dict
与参数orient='list'
print (df.groupby(['ID', 'Cluster'])
.Product.apply(lambda x: x.tolist())
.reset_index()
.to_dict(orient='list'))
{'Cluster': [4, 7, 5, 7],
'ID': [1, 2, 3, 4],
'Product': [['b', 'f', 'w'], ['u', 'b'],
['h', 'f', 'm', 'd'], ['s', 'b', 'g']]}
使用groupby
df.groupby(['ID', 'Cluster']).Product.apply(list)
ID Cluster
1 4 ['b', 'f', 'w']
2 7 ['u', 'b']
3 5 ['h', 'f', 'm', 'd']
4 7 ['s', 'b', 'g']
Name: Product, dtype: object
问题内容: 这个问题已经在这里有了答案 : 操作数应包含1列-MySQL NOT IN (3个答案) 6年前关闭。 该查询给我以下错误: 错误代码:1241。操作数应包含1列 有任何想法吗? 问题答案: 您不应该在子查询中包括在列表中。只是
只是徘徊,如果数组值包含c#.net中的字符串,我怎么能从列表中找到值? 示例:我有以下代码将值存储到列表中 如何检查tempTraker数组值是否包含“1|”并返回完整的值“1|e”?有可能吗?
我有一个类型的变量,其中item如下所示: 我想将其重新排序为,其中键是customerId,然后值是具有该客户ID的所有项的列表。
我有一个Python pandas DataFrame: 我想把一些股票的所有行放在一起,比如。这意味着我想要这样的语法: 既然熊猫不接受上述命令,如何达到目标?
我的列表由变量类型(字符串),金额(双精度)和数量(整数)组成,它看起来像这样: 所以我试图循环我的数组来寻找重复的,如果是重复的,就加上数量。结果会是这样的: 我尝试过创建另一个列表,将列表添加到新列表中,然后比较它们,但没有成功 我不希望对值进行硬编码以检查重复类型
我有一个矩阵,有很多行和列 使用 我想确定原始矩阵中每一行的第一次出现:这里有向量 我想出的最好的方法是使用既不高效也不优雅的循环的复杂和迂回的方法。我也知道data.frames的可能解决方案;那些涉及将行连接到字符串中的解决方案也是相当资源密集型的。 有没有使用基本R的优雅解决方案?