python - 具有非数字数据的索引列中具有重复项的透视/分组数据框

标签 python pandas pivot pivot-table

假设我有以下示例数据框:

df1 = pd.DataFrame({'col1': ['A', 'A', 'B', 'A'], 'col2': ['CA', 'DA', 'CA', 'CA'], 'col3': [1, 1, 1, 2]})


Out[25]:

  col1 col2 col3
0  A    CA   1 
1  A    DA   1 
2  B    CA   1 
3  A    CA   2 

我想通过“col3”作为索引和“col1”作为新列(在本例中列是“A”或“B”)对该表进行分组,并且值应该是“col2”。

我用pivot_table(也用pivot)尝试过:

pd.pivot_table(df1,index='col3', columns="col1", values=['col2'])

在这种情况下,错误是:没有要聚合的数字类型pivot命令的情况下,错误是:多个索引。这两种情况对我来说似乎都是合理的。但有什么选择可以做到这一点吗?当我的一列有两个值时,我更喜欢以下结果:

  A                B
1 ['CA', 'DA']     CA
2  'CA'            NaN

最佳答案

对于输出中包含缺失值的所有列表,添加自定义 lambda 函数:

df1 = pd.pivot_table(df1,index='col3', columns="col1", values='col2',
                     aggfunc = lambda x: x.tolist())
print (df1)
col1         A     B
col3                
1     [CA, DA]  [CA]
2         [CA]   NaN

如果需要标量而不是一个元素列表,请添加 if-else 语句:

df1 = pd.pivot_table(df1,index='col3', columns="col1", values='col2', 
                     aggfunc = lambda x: x.tolist() if len(x) > 1 else x.iat[0])
print (df1)
col1         A    B
col3               
1     [CA, DA]   CA
2           CA  NaN

关于python - 具有非数字数据的索引列中具有重复项的透视/分组数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56703268/

相关文章:

python - 如何将一个数据框中的每一行与其他数据框中的所有行进行比较并计算距离度量?

postgresql - 为 Postgres 交叉表动态生成 AS 子句

mysql - 编号状态的条件聚合

带有额外字符的python 3打印

java - 如何解析xls文件? (已知语言: Python, Java、Lua)

python - CSV匹配值python

python - 读取树莓派的GPIO引脚

python - Pandas.read_excel 保存后使用旧数据

python - 在向其中插入新数据时是否可以转储/复制 PostgreSQL 表?

r - 在 `dplyr` 中,当使用 `pivot_wide` 时,我想同时替换 'NA'