Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何基于列中的值折叠行?_Python_Bash_Tr - Fatal编程技术网

Python 如何基于列中的值折叠行?

Python 如何基于列中的值折叠行?,python,bash,tr,Python,Bash,Tr,我将在这里更详细地描述我的意思。 假设我有一个如下所示的数据表: +-----------+---------+---------+---------+---------+---------+---------+--------------+ | | Person1 | Person2 | Person4 | Person4 | Person5 | Person6 | City | +-----------+---------+---------+------

我将在这里更详细地描述我的意思。 假设我有一个如下所示的数据表:

+-----------+---------+---------+---------+---------+---------+---------+--------------+
|           | Person1 | Person2 | Person4 | Person4 | Person5 | Person6 |     City     |
+-----------+---------+---------+---------+---------+---------+---------+--------------+
| January   | -       |       - | Yes     |       - | Yes     | -       | SanFrancisco |
| Febuary   | Yes     |       - | -       |       - | -       | -       | SanFrancisco |
| March     | -       |       - | -       |       - | -       | -       | SanFrancisco |
| April     | -       |       - | -       |       - | -       | -       | NewYork      |
| May       | Yes     |       - | -       |       - | -       | -       | NewYork      |
| June      | -       |       - | -       |       - | -       | -       | NewYork      |
| July      | -       |       - | -       |       - | Yes     | -       | NewYork      |
| August    | -       |       - | -       |       - | -       | -       | NewYork      |
| September | -       |       - | -       |       - | -       | -       | Miami        |
| November  | -       |       - | -       |       - | -       | Yes     | Miami        |
| December  | -       |       - | -       |       - | -       | -       | Miami        |
+-----------+---------+---------+---------+---------+---------+---------+--------------+
+---------+---------+---------+---------+---------+---------+--------------+
| Person1 | Person2 | Person4 | Person4 | Person5 | Person6 | City         |
+---------+---------+---------+---------+---------+---------+--------------+
| Yes     | -       | Yes     | -       | Yes     | -       | SanFrancisco |
| Yes     | -       | -       | -       | Yes     | -       | NewYork      |
| -       | -       | -       | -       | -       | Yes     | Miami        |
+---------+---------+---------+---------+---------+---------+--------------+
$ cat file
Month,Person1,Person2,Person4,Person4,Person5,Person6,City
January,-,-,Yes,-,Yes,-,SanFrancisco
Febuary,Yes,-,-,-,-,-,SanFrancisco
March,-,-,-,-,-,-,SanFrancisco
April,-,-,-,-,-,-,NewYork
May,Yes,-,-,-,-,-,NewYork
June,-,-,-,-,-,-,NewYork
July,-,-,-,-,Yes,-,NewYork
August,-,-,-,-,-,-,NewYork
September,-,-,-,-,-,-,Miami
November,-,-,-,-,-,Yes,Miami
December,-,-,-,-,-,-,Miami
忽略用于stackoverflow格式的ascii,它是一个简单的电子表格,根据6个人在哪个月去过哪个城市来跟踪他们

我只想知道,哪些人去过哪些城市。有效地将列表压缩为如下所示:

+-----------+---------+---------+---------+---------+---------+---------+--------------+
|           | Person1 | Person2 | Person4 | Person4 | Person5 | Person6 |     City     |
+-----------+---------+---------+---------+---------+---------+---------+--------------+
| January   | -       |       - | Yes     |       - | Yes     | -       | SanFrancisco |
| Febuary   | Yes     |       - | -       |       - | -       | -       | SanFrancisco |
| March     | -       |       - | -       |       - | -       | -       | SanFrancisco |
| April     | -       |       - | -       |       - | -       | -       | NewYork      |
| May       | Yes     |       - | -       |       - | -       | -       | NewYork      |
| June      | -       |       - | -       |       - | -       | -       | NewYork      |
| July      | -       |       - | -       |       - | Yes     | -       | NewYork      |
| August    | -       |       - | -       |       - | -       | -       | NewYork      |
| September | -       |       - | -       |       - | -       | -       | Miami        |
| November  | -       |       - | -       |       - | -       | Yes     | Miami        |
| December  | -       |       - | -       |       - | -       | -       | Miami        |
+-----------+---------+---------+---------+---------+---------+---------+--------------+
+---------+---------+---------+---------+---------+---------+--------------+
| Person1 | Person2 | Person4 | Person4 | Person5 | Person6 | City         |
+---------+---------+---------+---------+---------+---------+--------------+
| Yes     | -       | Yes     | -       | Yes     | -       | SanFrancisco |
| Yes     | -       | -       | -       | Yes     | -       | NewYork      |
| -       | -       | -       | -       | -       | Yes     | Miami        |
+---------+---------+---------+---------+---------+---------+--------------+
$ cat file
Month,Person1,Person2,Person4,Person4,Person5,Person6,City
January,-,-,Yes,-,Yes,-,SanFrancisco
Febuary,Yes,-,-,-,-,-,SanFrancisco
March,-,-,-,-,-,-,SanFrancisco
April,-,-,-,-,-,-,NewYork
May,Yes,-,-,-,-,-,NewYork
June,-,-,-,-,-,-,NewYork
July,-,-,-,-,Yes,-,NewYork
August,-,-,-,-,-,-,NewYork
September,-,-,-,-,-,-,Miami
November,-,-,-,-,-,Yes,Miami
December,-,-,-,-,-,-,Miami

每一行只有一个城市,包含哪些人去过。是否有一种最佳的方法来实现这一点,或者说,是否有某种tr(挤压)/sed工具已经实现了这一点?如果我必须对其进行编码,那么最佳的逻辑是什么?

对于您在这里尝试执行的操作,正确的术语是聚合。根据我的经验,这个操作中不常用collapse这个词

我在这里学习python,所以可能有更好的方法,但我已经通过使用模块实现了这一点,特别是类型:


另外,我强烈建议您研究一下,它是一个优秀的、越来越普遍的统计、图形和通用数据分析平台,非常适合处理Excel样式的表格数据。在R中,这些类型的数据格式转换肯定更自然,尽管学习曲线相当陡峭。以下是R实现:

df <- read.csv(stringsAsFactors=F,text=
'Date,Person1,Person2,Person3,Person4,Person5,Person6,City
January,-,-,Yes,-,Yes,-,SanFrancisco
Febuary,Yes,-,-,-,-,-,SanFrancisco
March,-,-,-,-,-,-,SanFrancisco
April,-,-,-,-,-,-,NewYork
May,Yes,-,-,-,-,-,NewYork
June,-,-,-,-,-,-,NewYork
July,-,-,-,-,Yes,-,NewYork
August,-,-,-,-,-,-,NewYork
September,-,-,-,-,-,-,Miami
November,-,-,-,-,-,Yes,Miami
December,-,-,-,-,-,-,Miami'
);

aggregate(.~City,df[-1L],function(x) if (any(x=='Yes')) 'Yes' else '-');
##           City Person1 Person2 Person3 Person4 Person5 Person6
## 1        Miami       -       -       -       -       -     Yes
## 2      NewYork     Yes       -       -       -     Yes       -
## 3 SanFrancisco     Yes       -     Yes       -     Yes       -

df在这里,正确的术语是聚合。根据我的经验,这个操作中不常用collapse这个词

我在这里学习python,所以可能有更好的方法,但我已经通过使用模块实现了这一点,特别是类型:


另外,我强烈建议您研究一下,它是一个优秀的、越来越普遍的统计、图形和通用数据分析平台,非常适合处理Excel样式的表格数据。在R中,这些类型的数据格式转换肯定更自然,尽管学习曲线相当陡峭。以下是R实现:

df <- read.csv(stringsAsFactors=F,text=
'Date,Person1,Person2,Person3,Person4,Person5,Person6,City
January,-,-,Yes,-,Yes,-,SanFrancisco
Febuary,Yes,-,-,-,-,-,SanFrancisco
March,-,-,-,-,-,-,SanFrancisco
April,-,-,-,-,-,-,NewYork
May,Yes,-,-,-,-,-,NewYork
June,-,-,-,-,-,-,NewYork
July,-,-,-,-,Yes,-,NewYork
August,-,-,-,-,-,-,NewYork
September,-,-,-,-,-,-,Miami
November,-,-,-,-,-,Yes,Miami
December,-,-,-,-,-,-,Miami'
);

aggregate(.~City,df[-1L],function(x) if (any(x=='Yes')) 'Yes' else '-');
##           City Person1 Person2 Person3 Person4 Person5 Person6
## 1        Miami       -       -       -       -       -     Yes
## 2      NewYork     Yes       -       -       -     Yes       -
## 3 SanFrancisco     Yes       -     Yes       -     Yes       -
df
您需要CSV输出


您需要CSV输出。

一月
旧金山
(例如)是否为常量?我的意思是,一个人能在一月份在另一个城市,还是只在旧金山?其次,您的数据是如何表示的?是excel表格吗?矩阵?3d列表?它们不是固定的,而且它们的当前位置也没有标注。。今年只是“你去过的著名城市”。该列表是excel工作表中的简单TSV或CSV。我计划使用python脚本对其进行操作。这里表示ascii字符是为了便于查看,因为出于某些原因,SO没有表粘贴对不起,我没有很好地理解这个问题,但是,如果,例如,person 6在一月份去过迈阿密,该怎么办?如何表示?如果您的数据是CSV,请向我们显示CSV,不要向我们显示其他工具在输入CSV时输出的其他格式。只需提供简洁、可测试的样本输入和我们可以测试潜在解决方案的预期输出。行
一月
旧金山
(例如)是否为常量?我的意思是,一个人能在一月份在另一个城市,还是只在旧金山?其次,您的数据是如何表示的?是excel表格吗?矩阵?3d列表?它们不是固定的,而且它们的当前位置也没有标注。。今年只是“你去过的著名城市”。该列表是excel工作表中的简单TSV或CSV。我计划使用python脚本对其进行操作。这里表示ascii字符是为了便于查看,因为出于某些原因,SO没有表粘贴对不起,我没有很好地理解这个问题,但是,如果,例如,person 6在一月份去过迈阿密,该怎么办?如何表示?如果您的数据是CSV,请向我们显示CSV,不要向我们显示其他工具在输入CSV时输出的其他格式。简单地提供简洁、可测试的样本输入和我们可以测试潜在解决方案的预期输出。我似乎得到了:Person1,Person2,Person4,Person4,Person5,Person6,City是,是,是,是,是,旧金山是,是,是,纽约-,是,迈阿密-,迈阿密-,迈阿密(迈阿密重复了两次)@Tom那么你没有运行我发布在输入文件上的脚本。也许你的文件末尾有一个空行?可能它包含控制Ms(
cat-v文件
要检查)?编辑您的问题以显示您正在运行的命令、您正在运行的输入文件以及您得到的输出(如果您需要更多帮助)。我似乎得到了:Person1、Person2、Person4、Person4、Person5、Person6、City是、是、是、是、是、旧金山是、是、是、纽约-是、迈阿密-是、迈阿密-是、迈阿密(Miami重复了两次)@Tom那么你没有运行我在我发布的输入文件上发布的脚本。可能你的文件末尾有一个空行?可能它包含控制Ms(
cat-v file
要检查)?编辑您的问题,以显示您正在运行的命令、您正在运行的输入文件以及您获得的输出(如果您需要更多帮助)。“聚合”。我会记住的。谢谢!“聚合”。我会记住的。谢谢!