python - 根据发生情况合并行,同时维护 Python 中 DataFrame 中的唯一值

标签 python pandas dataframe pandas-groupby

数据框:

Name         Category        Port          Class
A                Code         443        string1
A                Code          80        string2
B                Math         443        string3
A                Code         443        string1
B                Math          80        string4

我尝试过的代码:

df1 = df.name.ne(df.name.shift())
count = df.name.groupby(df1.cumsum()).size()

我得到的输出:

Name     Category      Port       Class     Count
A            Code       443     string1         2
B            Math       443     string3         1
A            Code       443     string1         1
B            Math        80     string4         1

我想要的输出:

Name    Category         Port               Class   Count
A           Code      443, 80    string1, string2       2
B           Math          443             string3       1
A           Code          443             string1       1
B           Math           80             string4       1

感谢任何帮助。

最佳答案

使用groupbyagg以及适当的函数应该可以得到你想要的。下面使用list,这将导致保留所有值,如果您只想要唯一的值,可以将其更改为set

df['cumsum'] = df.Name.ne(df.Name.shift()).cumsum()
df2 = df.groupby(df["cumsum"]).agg({'Name': 'first', 'Category': 'first', 'Port': list, 'Class': [list, 'count']})
df2.columns = df2.columns.droplevel(1).values[:-1].tolist() + ['Count']
df2 = df2.reset_index(drop=True)

这会给你:

  Name  Category       Port               Class  Count
0    A      Code  [443, 80]  [string1, string2]      2
1    B      Math      [443]           [string3]      1
2    A      Code      [443]           [string1]      1
3    B      Math       [80]           [string4]      1

关于python - 根据发生情况合并行,同时维护 Python 中 DataFrame 中的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60597282/

相关文章:

python - 如何在 scikit-learn 中正确加载文本数据?

Python/numpy : Most efficient way to sum n elements of an array, 这样每个输出元素都是前n个输入元素的总和?

python - 动态添加 Pandas 数据框中的列

python - 如何将 pandas 中的特定列值转换为列表?

python - 仅从 Python 系列中提取数字

python - 在由 True,False 填充的 pandas df 中创建新列,具体取决于浮点列是否为整数 (`float.is_integer` )

python - 为什么正常的重复乘幂算法效率不高?

python - 添加装饰器后,Flask 抛出 "Could not build url for endpoint ' 索引'"

python - Pandas 数据透视表到数据框

python:我的日期索引有什么问题?