在Pandas DataFrame中组合来自多行的数据

时间:2017-11-10 21:42:29

标签: python pandas pandas-groupby

我使用Pandas作为Python的一部分,我有下表。我无法为我的生活弄清楚如何做到以下几点。任何帮助将不胜感激。

我有一个数据表,其中有许多重复的时间点。但是,每个重复的时间点都填充了行的不同部分。我想将所有时间点组合成一个包含所有信息的行。

我不想总结这些列。 我不想连接列。

我想在某个列中获取单个时间点的第一个值,并忽略该列中同一时间点的任何其他值。

表格应该更清楚。

+----------------+---+---+---+--+---+---+---+--+---+---+---+
| 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 |
+----------------+---+---+---+--+---+---+---+--+---+---+---+

我将不胜感激。

1 个答案:

答案 0 :(得分:0)

假设时间戳是索引,请使用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 s。如果没有,请在分组前将其替换为

df = df.replace('^\s*$', np.nan, regex=True)