0

我有一个数据框:

   Text                 
   Background  
   Clinical      
   Method
   Direct
   Background
   Direct

现在我想根据他们的第一个单词将它们分组在新列中,例如Background 属于第 1 组Clinical 属于第 2 组,就像这样。

预期输出:

一个数据框:

   Text            Group      
   Background       1
   Clinical         2
   Method           3
   Direct           4
   Background       1
   Direct           4
4

3 回答 3

1

尝试这个:

import pandas as pd

text = ['Background', 'Clinical', 'Method', 'Direct', 'Background', 'Direct']
df = pd.DataFrame(text, columns=['Text'])


def create_idx_map():
    idx = 1
    values = {}
    for item in list(df['Text']):
        if item not in values:
            values[item] = idx
            idx += 1
    return values

values = create_idx_map()
df['Group'] = [values[x] for x in list(df['Text'])]

print(df)
于 2021-10-16T13:38:00.340 回答
0

解决方案可能如下:

import pandas as pd
data = pd.DataFrame([["A B", 1], ["A C", 2], ["B A", 3], ["B C", 5]], columns=("name", "value"))
data.groupby(by=[x.split(" ")[0] for x in data.loc[:,"name"]])

您可以使用 选择前几个单词x.split(" ")[:NUMBER_OF_WORDS]。然后,您将所需的聚合应用于需要对象

于 2021-10-16T13:39:58.797 回答
0

想法:制作一个列的唯一值列表,Text对于该列,Group您可以在此唯一列表中分配值的索引。代码示例:

df = pd.DataFrame({"Text": ["Background", "Clinical", "Clinical", "Method", "Background"]})

# List of unique values of column `Text`
groups = list(df["Text"].unique())

# Assign each value in `Text` its index
# (you can write `groups.index(text) + 1` when the first value shall be 1)
df["Group"] = df["Text"].map(lambda text: groups.index(text))

# Ouptut for df
print(df)

### Result:
         Text  Group
0  Background      0
1    Clinical      1
2    Clinical      1
3      Method      2
4  Background      0
于 2021-10-16T13:35:18.310 回答