假设我有以下示例数据框:
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/