gpt4 book ai didi

python - 如何将 Final_Unique 列转换为 pandas 中的标题值

转载 作者:行者123 更新时间:2023-12-01 06:23:53 24 4
gpt4 key购买 nike

sample image to check the data

样本数据

Actual_Data     Final_Unique
8,8,8,8,8,8, 8,8
6,7,7,7,6,7, 6,7
2,12,3,4,12,12, 7,7
14,14,14,14,14,14, 7,6
1,1,12,2,2,4, 2,12
6,8,8,8,8,12, 12,3
6,6,6,6,3,14, 3,4
1,14,14,1,1,2, 4,12
1,1,1,1,1,14, 12,12

我正在尝试这个

newdf = a.pivot(index='Actual_Data', columns='Final_Unique')

我有2列实际数据和final_unique列,实际我有44000行,final_unique有266行我想获得266列和实际数据保持不变,并计算实际数据出现在标题中的次数

获取错误

存在重复数据无法 reshape

预期产出

ACTUAL DATA          8,8  6,7  7,7   7,6  2,12

8,8,8,8,8,8, 3 0 0 0 0

6,7,7,7,6,7, 0 2 1 1 0

2,12,3,4,12,12, 0 0 0 0 1

最佳答案

pivot_table 允许聚合函数,因此如果您仅将包含 1 的列添加到数据帧中,您可以获得预期的结果:

newdf = a.assign(val=1).pivot_table(values='val', index='Actual_Data',
columns='Final_Unique', aggfunc=sum, fill_value=0
).reset_index().rename_axis(None, axis=1)

使用它给出的示例数据:

          Actual_Data  12,12  12,3  2,12  3,4  4,12  6,7  7,6  7,7  8,8
0 1,1,1,1,1,14, 1 0 0 0 0 0 0 0 0
1 1,1,12,2,2,4, 0 0 1 0 0 0 0 0 0
2 1,14,14,1,1,2, 0 0 0 0 1 0 0 0 0
3 14,14,14,14,14,14, 0 0 0 0 0 0 1 0 0
4 2,12,3,4,12,12, 0 0 0 0 0 0 0 1 0
5 6,6,6,6,3,14, 0 0 0 1 0 0 0 0 0
6 6,7,7,7,6,7, 0 0 0 0 0 1 0 0 0
7 6,8,8,8,8,12, 0 1 0 0 0 0 0 0 0
8 8,8,8,8,8,8, 0 0 0 0 0 0 0 0 1
<小时/>

从您的评论来看,原始 a 数据帧的两列并不直接相关,但实际上是两个独立的系列,您只是想知道 Final_Unique 值在 Actual_Data 数据帧中出现了多少次。

这段代码应该给出:

newdf = a[['Actual_Data']]
for col in set(a['Final_Unique'].dropna()):
newdf[col] = newdf.Actual_Data.str.findall('(^|,)'+col+'(?=,)').apply(len)

结果是:

          Actual_Data  8,8  12,3  12,12  7,7  2,12  6,7  4,12  3,4  7,6
0 8,8,8,8,8,8, 3 0 0 0 0 0 0 0 0
1 6,7,7,7,6,7, 0 0 0 1 0 2 0 0 1
2 2,12,3,4,12,12, 0 1 1 0 2 0 1 1 0
3 14,14,14,14,14,14, 0 0 0 0 0 0 0 0 0
4 1,1,12,2,2,4, 0 0 0 0 0 0 0 0 0
5 6,8,8,8,8,12, 2 0 0 0 0 0 0 0 0
6 6,6,6,6,3,14, 0 0 0 0 0 0 0 0 0
7 1,14,14,1,1,2, 0 0 0 0 0 0 0 0 0
8 1,1,1,1,1,14, 0 0 0 0 0 0 0 0 0

上述代码背后的基本原理是:

  • Final_Unique 列计算列列表:set 将自动删除重复项(但会破坏顺序),dropna() 将删除空值
  • Actual_Data 列创建一个新数据框。
  • 从上一步计算的列表中为每列添加列到该数据帧
    • 使用 str.findall 和适当的正则表达式来查找包含逗号后或字符串开头并后跟逗号的列名称的非重叠序列 - 最后一个逗号不包含在匹配的字符串中,以允许正确计数连续序列,因此是 (?=...)
    • 应用 len 函数以简单的计数方式转换该列表

关于python - 如何将 Final_Unique 列转换为 pandas 中的标题值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60258522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com