我有一个表(来自日志文件)的电子邮件和其他三个列,其中包含该用户与系统交互的状态,电子邮件(用户)可能有100或1000个条目,每个条目包含这三个值组合,可能会重复同样的电子邮件和其他人.
看起来像这样:
+---------+---------+---------+-----+
| email | val1 | val2 | val3 |
+---------+---------+---------+-----+
|jal@h | cast | core | cam |
|hal@b |little ja| qar | ja sa |
|bam@t | cast | core | cam |
|jal@h |little ja| qar | jaja |
+---------+---------+---------+-----+
所以,电子邮件重复,所有值都重复,每列有40个可能的值,所有字符串.所以我想对不同的电子邮件进行排序,然后将所有可能的值作为列名称,并在其下计算特定电子邮件重复的这个值的数量,如下所示:
+-------+--------+--------+------+----------+-----+--------+-------+
| email | cast | core | cam | little ja| qar | ja sa | blabla |
+-------+--------+--------+------+----------+-----+--------+--------|
|jal@h | 55 | 2 | 44 | 244 | 1 | 200 | 12 |
|hal@b | 900 | 513 | 101 | 146 | 2 | 733 | 833 |
|bam@t | 1231 | 33 | 433 | 411 | 933 | 833 | 53 |
+-------+--------+--------+------+----------+-----+--------+---------
我尝试过MysqL,但我设法为每封电子邮件计算一定值的总出现次数,但不计算每列中的所有可能值:
SELECT
distinct email,
count(val1) as "cast"
FROM table1
where val1 = 'cast'
group by email
这个查询显然没有这样做,因为它仅从第一列’val1’的值’cast’输出,我正在寻找的是第一,第二和第三列中的所有不同值都被转换为列头和对于某个电子邮件“用户”,行中的值将是该值的总和.
有一个关键的桌子的东西,但我无法让它工作.
我在MysqL中将这些数据作为一个表来处理,但它在csv文件中可用,所以如果查询不可能,python将是一个可能的解决方案,并且在sql之后是首选.
更新
在python中,是否可以输出数据:
+-------+--------+---------+------+----------+-----+--------+-------+
| | val1 | val2 | val3 |
+-------+--------+---------+------+----------+-----+--------+-------+
| email | cast |little ja|core | qar |cam | ja sa | jaja |
+-------+--------+---------+------+----------+-----+--------+--------|
|jal@h | 55 | 2 | 44 | 244 | 1 | 200 | 12 |
|hal@b | 900 | 513 | 101 | 146 | 2 | 733 | 833 |
|bam@t | 1231 | 33 | 433 | 411 | 933 | 833 | 53 |
+-------+--------+--------+------+----------+-----+--------+---------
我对python不太熟悉.
解决方法:
如果您使用pandas,则可以在通过电子邮件对数据框进行分组后执行value_counts,然后将其取消堆叠/转换为宽格式:
(df.set_index("email").stack().groupby(level=0).value_counts()
.unstack(level=1).reset_index().fillna(0))
要获取更新的结果,您可以在堆栈后按电子邮件和val *列进行分组:
(df.set_index("email").stack().groupby(level=[0, 1]).value_counts()
.unstack(level=[1, 2]).fillna(0).sort_index(axis=1))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。