在数据帧中调整所有行,然后仅基于d进行转换

2024-04-20 15:28:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道还有另一篇关于熊猫中多行匹配的帖子,但我现在找的不是这种方法

我的问题是:

我想将数据集A的行中的所有数据进行拟合。在数据集A中,我有4行,每行有不同的数据。我想对所有4行的所有数据进行拟合,然后进行转换

import pandas as pd
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, MinMaxScaler

pda = pd.DataFrame({"input":pd.Series(["abc23d,efgh45,jklfj4","dfer56,efgh45,jklh45","abc23d,efgh66,jklfj7","abc23d,efgh45,jklfj4"]),
                   "label": pd.Series([1,2,3,1])})

label_encoder = LabelEncoder()
pda["encoded_input"] = pda["input"].apply(lambda x:x.split(",")).apply(label_encoder.fit_transform)

当前结果:(这是错误的,因为它变换每一行,同时变换。我不想一次调整和转换每一行,因为它将保持重置调整词汇表。我想首先在所有行中拟合所有数据,我们有5个以上的数据,所以它的值应该在5以上,我试图首先合并所有行数据,然后使其列出并拟合,但这将花费太多。**我想知道一个更好更聪明的方法来降低成本)

    input   label   encoded_input
0   abc23d,efgh45,jklfj4    1   [0, 1, 2]
1   dfer56,efgh45,jklh45    2   [0, 1, 2]
2   abc23d,efgh66,jklfj7    3   [0, 1, 2]
3   abc23d,efgh45,jklfj4    1   [0, 1, 2]

预期结果:(每行数据具有唯一的数字,然后在转换后赋值)

    input   label   encoded_input
0   abc23d,efgh45,jklfj4    1   [0, 1, 2]
1   dfer56,efgh45,jklh45    2   [0, 1, 2]
2   abc23d,efgh66,jklfj7    3   [0, 1, 2]
3   abc23d,efgh45,jklfj4    1   [0, 1, 2]

Tags: 数据fromimportinputsklearnlabelpdpda
1条回答
网友
1楼 · 发布于 2024-04-20 15:28:58

我将使用

pda['ecode']=pda.input.str.split(',',expand=True).T.rank().T.values.tolist()
pda
                  input  label            ecode
0  abc23d,efgh45,jklfj4      1  [1.0, 2.0, 3.0]
1  dfer56,efgh45,jklh45      2  [1.0, 2.0, 3.0]
2  abc23d,efgh66,jklfj7      3  [1.0, 2.0, 3.0]
3  abc23d,efgh45,jklfj4      1  [1.0, 2.0, 3.0]

更新

pda['ecode']=pda.input.str.split(',').explode().astype('category').cat.codes.groupby(level=0).apply(list)
pda
                  input  label      ecode
0  abc23d,efgh45,jklfj4      1  [0, 2, 4]
1  dfer56,efgh45,jklh45      2  [1, 2, 6]
2  abc23d,efgh66,jklfj7      3  [0, 3, 5]
3  abc23d,efgh45,jklfj4      1  [0, 2, 4]

相关问题 更多 >