【发布时间】:2017-06-22 04:01:58
【问题描述】:
我有一个表(来自日志文件),其中包含电子邮件和其他三个列,其中包含该用户与系统交互的状态,电子邮件(用户)可能有 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不是很熟悉。
【问题讨论】: