【发布时间】:2019-12-17 18:29:57
【问题描述】:
我有一个包含多个元信息的数据框。如果所有特征都相同,则该行属于一个组。
假设这个数据框是一个简化的例子:
import pandas as pd
data = pd.DataFrame({"feature1": ["A", "A", "A", "B", "B", "B"]
, "feature2": [1,2,1,3,1,3]})
我现在想为每个不同的组合创建一个不同的标记,所以包括我的标记列,我希望这个数据框
expected_result = pd.DataFrame({"feature1": ["A", "A", "A", "B", "B", "B"]
, "feature2": [1,2,1,3,1,3]
, "hash": ["ab", "jk", "ab", "lu", "la", "lu"]})
feature1 feature2 hash
0 A 1 ab
1 A 2 jk
2 A 1 ab
3 B 3 lu
4 B 1 la
5 B 3 lu
def create_uniqueID(x, y, z): 如果 x 为无: x = "" 别的: x = str(x) 如果 y 为无: y = "" 别的: x = str(x) 如果 z 为无: z = "_" 别的: x = str(x) 返回 x+y+z
我很自然地想到了对这些数据进行哈希处理,因此尝试了这个:
def create_uniqueID(x, y):
if x is None:
x = "_"
if y is None:
y = "_"
return hash(tuple([x,y]))
data["marker"] = data.apply(create_uniqueID(data.feature1, data.feature2))
但是我得到的反馈是,Series 是可变的,因此不能被散列。所以我假设我必须按元素来做,但我不知道如何以简洁有效的方式做到这一点。
可以获取每列的所有值,将它们散列并重新附加它们,但我认为这不是一个好的解决方案。
【问题讨论】: