【问题标题】:How can I aggregate strings from many cells into one cell?如何将多个单元格中的字符串聚合到一个单元格中?
【发布时间】:2021-11-18 11:01:00
【问题描述】:

假设我有两个班级,每个班级都有几个学生,我想考虑每个班级可能的配对。在我的原始数据中,每个学生有一行。

在 Pandas 中转换此数据集的最简单方法是什么

   Class Students
0      1  A
1      1  B
2      1  C
3      1  D
4      1  E
5      2  F
6      2  G
7      2  H

喜欢这个新东西吗?

   Class Students
0       1  A,B
1       1  A,C
2       1  A,D
3       1  A,E
4       1  B,C
5       1  B,D
6       1  B,E
7       1  C,D
6       1  B,E
8       1  C,D
9       1  C,E
10      1  D,E
11      2  F,G
12      2  F,H
12      2  G,H

【问题讨论】:

  • 向我们展示您的尝试。
  • 有点愚蠢的东西,多步骤。仍在进行第二步。这是第一个:for i in school['class'].unique(): class.append(i) pairs.append(list(combinations(school[school['class']==i]['student'], 2)))
  • 我相信您应该在问题正文中包含您尝试过的任何代码。这避免了与问题质量相关的反对意见

标签: pandas string-concatenation pairing


【解决方案1】:

试试这个:

import itertools
import pandas as pd

cla = [1, 1, 1, 1, 1, 2, 2, 2]
s = ["A", "B", "C", "D" , "E", "F", "G", "H"]
df = pd.DataFrame(cla, columns=["Class"])
df['Student'] = s


def create_combos(list_students):
    combos = itertools.combinations(list_students, 2)
    str_students = []
    for i in combos:
        str_students.append(str(i[0])+","+str(i[1]))
    return str_students

def iterate_df(class_id):
    df_temp = df.loc[df['Class'] == class_id]
    list_student = list(df_temp['Student'])
    list_combos = create_combos(list_student)
    list_id = [class_id for i in list_combos]
    return list_id, list_combos

list_classes = set(list(df['Class']))
new_id = []
new_combos = []
for idx in list_classes:
    tmp_id, tmp_combo = iterate_df(idx)
    new_id += tmp_id
    new_combos += tmp_combo

new_df = pd.DataFrame(new_id, columns=["Class"])
new_df["Student"] = new_combos

print(new_df)

【讨论】:

  • 如果对您的问题有帮助,请接受答案
  • 非常感谢!
  • 别忘了接受答案
猜你喜欢
  • 2014-12-31
  • 1970-01-01
  • 2013-01-29
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 2017-11-30
  • 2017-05-09
相关资源
最近更新 更多