我是机器学习的新手。我试图使用pandas / tensorflow来处理一些数据。 我知道什么时候有数据:
+----+------+
| ID | asset|
+----+------+
| A | 1 |
| B | 2 |
| C | 3 |
| D | 4 |
+----+------+
我可以得到col" asset"作为列表[1,2,3,4]
,然后使用tensorflow将其传输到[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]
。
但如果我的数据看起来像这样:
+----+------+
| ID | asset|
+----+------+
| A | 1 |
| A | 2 |
| A | 3 |
| B | 1 |
+----+------+
另一张看起来像这样的表:
+----+------+
| ID | debt |
+----+------+
| D | 1 |
| D | 2 |
| D | 3 |
| A | 1 |
+----+------+
也就是说,我的客户A有3种不同类型的资产,客户D有3种不同类型的债务。请注意,客户端D甚至不存在于第一个表中。
第一个问题是我如何将这些表组合起来找到匹配的客户资产/债务。我只是加入那些桌子吗? (在熊猫pd.merge()
)
这样,客户端D将具有资产的空值。或者我应该只选择每个表中存在的客户端?我该怎么办?
第二个问题是如何将表格A转移到[[1,1,1], [1,0,0]]
?
我希望描述有意义。如果我说错了,请纠正我。抱歉,这个问题很长:(
答案 0 :(得分:1)
第一个问题:
答案真的取决于您的机器学习问题以及您希望如何预处理数据(如果您想删除缺少数据的样本或将其归类)。由于这可能是您需要准备数据集的第一个问题,我建议您查看this。
现在,如果您决定要删除缺失的值,那么您可以继续执行此类inner merge
:
df = pd.merge(df1,df2,"inner")
就像你只会采用df1
和df2
之间的交集。
如果您选择估算缺失值,请执行outer merge
之类的操作:
df = pd.merge(df1,df2,"outer")
那么你应该能够随心所欲地填充你缺失的值(链接中提出的方法是一种方法)。
第二个问题:
然而,对于这个问题,可能有一个更好的方法(但我完全忘记了它的名字,如果确实存在的话),但这也应该做得很好:a = df1.groupby('ID')['asset'].unique()
# to have something like
#ID
#A [1, 2, 4]
#B [1]
x = a.size
y = max([max(x) for x in a])
z = np.zeros((x,y))
# just instantiating the final matrix with the right shape and zeros
然后您可以使用numpy.put将1's
实际放在正确的位置,如下所示:
for row in range(x):
np.put(z[row],a[row]-1,1)
O / P(例如):
[[ 1. 1. 1.]
[ 1. 0. 0.]]
我希望这有用,如果有任何问题或改进,请发表评论。