想要从 pandas/python 中的数据帧创建类似数据帧的稀疏矩阵
Want to create a sparse matrix like dataframe from a dataframe in pandas/python
我有这样一个数据框
我想把它转换成这样,注意 ds 是有人访问的日期,值从 0 到 31,未访问的天数将显示 0,访问的天数将显示显示 1. 有点像稀疏矩阵,有人可以帮忙吗
更新:pd.get_dummies
现在接受 sparse=True
来创建 SparseArray
输出。
pd.get_dummies(s: pd.Series)
可用于创建这样的单热编码:
header = ["ds", "buyer_id", "email_address"]
data = [[23, 305, "fatin1bd@gmail.com"],
[22, 307, "shovonbad@gmail.com"],
[25, 411, "raisulk@gmail.com"],
[22, 588, "saiful.sdp@hotmail.com"],
[24, 664, "osman.dhk@gmail.com"]]
df = pd.DataFrame(data, columns=header)
df.join(pd.get_dummies(df["ds"]))
输出:
ds buyer_id email_address 22 23 24 25
0 23 305 fatin1bd@gmail.com 0 1 0 0
1 22 307 shovonbad@gmail.com 1 0 0 0
2 25 411 raisulk@gmail.com 0 0 0 1
3 22 588 saiful.sdp@hotmail.com 1 0 0 0
4 24 664 osman.dhk@gmail.com 0 0 1 0
仅作补充说明:生成的数据帧仍以 dense 格式存储。您可以使用 scipy.sparse
矩阵格式以真正的稀疏格式存储它。
从@sim 添加到解决方案。通过使用参数列,可以避免连接。
sparse=True 参数将 return 一个稀疏矩阵。 sparse=False 将 return 一个密集矩阵。
header = ["ds", "buyer_id", "email_address"]
data = [[23, 305, "fatin1bd@gmail.com"],
[22, 307, "shovonbad@gmail.com"],
[25, 411, "raisulk@gmail.com"],
[22, 588, "saiful.sdp@hotmail.com"],
[24, 664, "osman.dhk@gmail.com"]]
df = pd.DataFrame(data, columns=header)
df=pd.get_dummies(df,columns=['ds'],sparse=True)
如果使用 sparse=True,可以使用 sparse.to_dense() 将结果转换回密集
在特定的列上。有关详细信息,请参阅 User Guide
ds_cols=[col for col in df.columns if col.startswith('ds_')]
df=pd.concat([df[['buyer_id',"email_address"]],
df[ds_cols].sparse.to_dense()],axis=1)
我有这样一个数据框
我想把它转换成这样,注意 ds 是有人访问的日期,值从 0 到 31,未访问的天数将显示 0,访问的天数将显示显示 1. 有点像稀疏矩阵,有人可以帮忙吗
更新:pd.get_dummies
现在接受 sparse=True
来创建 SparseArray
输出。
pd.get_dummies(s: pd.Series)
可用于创建这样的单热编码:
header = ["ds", "buyer_id", "email_address"]
data = [[23, 305, "fatin1bd@gmail.com"],
[22, 307, "shovonbad@gmail.com"],
[25, 411, "raisulk@gmail.com"],
[22, 588, "saiful.sdp@hotmail.com"],
[24, 664, "osman.dhk@gmail.com"]]
df = pd.DataFrame(data, columns=header)
df.join(pd.get_dummies(df["ds"]))
输出:
ds buyer_id email_address 22 23 24 25
0 23 305 fatin1bd@gmail.com 0 1 0 0
1 22 307 shovonbad@gmail.com 1 0 0 0
2 25 411 raisulk@gmail.com 0 0 0 1
3 22 588 saiful.sdp@hotmail.com 1 0 0 0
4 24 664 osman.dhk@gmail.com 0 0 1 0
仅作补充说明:生成的数据帧仍以 dense 格式存储。您可以使用 scipy.sparse
矩阵格式以真正的稀疏格式存储它。
从@sim 添加到解决方案。通过使用参数列,可以避免连接。 sparse=True 参数将 return 一个稀疏矩阵。 sparse=False 将 return 一个密集矩阵。
header = ["ds", "buyer_id", "email_address"]
data = [[23, 305, "fatin1bd@gmail.com"],
[22, 307, "shovonbad@gmail.com"],
[25, 411, "raisulk@gmail.com"],
[22, 588, "saiful.sdp@hotmail.com"],
[24, 664, "osman.dhk@gmail.com"]]
df = pd.DataFrame(data, columns=header)
df=pd.get_dummies(df,columns=['ds'],sparse=True)
如果使用 sparse=True,可以使用 sparse.to_dense() 将结果转换回密集 在特定的列上。有关详细信息,请参阅 User Guide
ds_cols=[col for col in df.columns if col.startswith('ds_')]
df=pd.concat([df[['buyer_id',"email_address"]],
df[ds_cols].sparse.to_dense()],axis=1)