合并 Pandas DataFrame 中多行的数据
Combine Data from Multiple Rows in Pandas DataFrame
我正在使用 Pandas 作为 Python 的一部分,并且我有以下 table。我终生无法弄清楚如何执行以下操作。任何帮助将不胜感激。
我有一个数据table,其中有很多重复的时间点。但是,每个重复的时间点都填充了行的不同部分。我想将所有时间点合并到包含所有信息的一行中。
我不想对列求和。
我不想连接列。
我想获取特定列中单个时间点的第一个值,并忽略该列中同一时间点的任何其他值。
table 应该更清楚这一点。
+----------------+---+---+---+--+---+---+---+--+---+---+---+
| 09/07/20171310 | | 1 | | | | | | | | | |
| 09/07/20171310 | | | 1 | | | | | | | | |
| 09/07/20171310 | 3 | | | | | | | | | | |
| 09/07/20171310 | | | | | | | | | | | 1 |
| 09/07/20171310 | | | | | | | 1 | | | | |
| 09/07/20171310 | | | | | | | | | 2 | | |
| 09/07/20171310 | | | | | 2 | | | | | | |
| 09/07/20171920 | | | | | | | | | | 1 | |
| 09/07/20171920 | | | | | | | | | | | 1 |
| 09/07/20171920 | | | | | | | 1 | | | | |
| 09/07/20171920 | | | | | | 1 | | | | | |
| 09/07/20171920 | | | | | | | | | 3 | | |
| 09/07/20171920 | | | | | 3 | | | | | | |
| 09/07/20171920 | 6 | | | | | | | | | | |
| 09/07/20171920 | | | 1 | | | | | | | | |
| 09/07/20171920 | | 4 | | | | | | | | | |
+----------------+---+---+---+--+---+---+---+--+---+---+---+
我想要
+----------------+---+---+---+--+---+---+---+--+---+---+---+
| 09/07/20171310 | 3 | 1 | 1 | | 2 | | 1 | | 2 | | 1 |
| 09/07/20171920 | 6 | 4 | 1 | | 3 | 1 | 1 | | 3 | 1 | 1 |
+----------------+---+---+---+--+---+---+---+--+---+---+---+
如有任何帮助,我将不胜感激。
假设时间戳是索引,使用groupby
+ max
:
df.groupby(level=0).max().fillna('')
+----------------+---+---+---+--+---+-----+---+--+---+-----+---+
| 09/07/20171310 | 3 | 1 | 1 | | 2 | | 1 | | 2 | | 1 |
| 09/07/20171920 | 6 | 4 | 1 | | 3 | 1.0 | 1 | | 3 | 1.0 | 1 |
+----------------+---+---+---+--+---+-----+---+--+---+-----+---+
如果不是索引,请将 level=0
更改为 df.columns[0]
。
此处的另一个假设是您的空值为 NaN
。如果不是,请将它们替换为 before 分组:
df = df.replace('^\s*$', np.nan, regex=True)
我正在使用 Pandas 作为 Python 的一部分,并且我有以下 table。我终生无法弄清楚如何执行以下操作。任何帮助将不胜感激。
我有一个数据table,其中有很多重复的时间点。但是,每个重复的时间点都填充了行的不同部分。我想将所有时间点合并到包含所有信息的一行中。
我不想对列求和。 我不想连接列。
我想获取特定列中单个时间点的第一个值,并忽略该列中同一时间点的任何其他值。
table 应该更清楚这一点。
+----------------+---+---+---+--+---+---+---+--+---+---+---+
| 09/07/20171310 | | 1 | | | | | | | | | |
| 09/07/20171310 | | | 1 | | | | | | | | |
| 09/07/20171310 | 3 | | | | | | | | | | |
| 09/07/20171310 | | | | | | | | | | | 1 |
| 09/07/20171310 | | | | | | | 1 | | | | |
| 09/07/20171310 | | | | | | | | | 2 | | |
| 09/07/20171310 | | | | | 2 | | | | | | |
| 09/07/20171920 | | | | | | | | | | 1 | |
| 09/07/20171920 | | | | | | | | | | | 1 |
| 09/07/20171920 | | | | | | | 1 | | | | |
| 09/07/20171920 | | | | | | 1 | | | | | |
| 09/07/20171920 | | | | | | | | | 3 | | |
| 09/07/20171920 | | | | | 3 | | | | | | |
| 09/07/20171920 | 6 | | | | | | | | | | |
| 09/07/20171920 | | | 1 | | | | | | | | |
| 09/07/20171920 | | 4 | | | | | | | | | |
+----------------+---+---+---+--+---+---+---+--+---+---+---+
我想要
+----------------+---+---+---+--+---+---+---+--+---+---+---+
| 09/07/20171310 | 3 | 1 | 1 | | 2 | | 1 | | 2 | | 1 |
| 09/07/20171920 | 6 | 4 | 1 | | 3 | 1 | 1 | | 3 | 1 | 1 |
+----------------+---+---+---+--+---+---+---+--+---+---+---+
如有任何帮助,我将不胜感激。
假设时间戳是索引,使用groupby
+ max
:
df.groupby(level=0).max().fillna('')
+----------------+---+---+---+--+---+-----+---+--+---+-----+---+
| 09/07/20171310 | 3 | 1 | 1 | | 2 | | 1 | | 2 | | 1 |
| 09/07/20171920 | 6 | 4 | 1 | | 3 | 1.0 | 1 | | 3 | 1.0 | 1 |
+----------------+---+---+---+--+---+-----+---+--+---+-----+---+
如果不是索引,请将 level=0
更改为 df.columns[0]
。
此处的另一个假设是您的空值为 NaN
。如果不是,请将它们替换为 before 分组:
df = df.replace('^\s*$', np.nan, regex=True)