如何合并同一数据框中的两行

时间:2019-05-02 18:29:53

标签: python-3.x pandas

我有一个包含两行的数据框。这两个行的“ ID”列中的值都相同。如何创建一个新的数据框,并将两行中的所有值都放入一行,但放在单独的列中?

例如,如果在输入数据框中,两行中都有一个名为“ Amount”的列,则新数据框应包含一行,其中两个不同的列分别为Amount_1和Amount_2。

groupby不起作用,因为我不希望所有信息都在同一列中。

我无法合并,因为这不是来自两个不同的数据帧。

转弯:

+------+--------+----------+---------+
| ID   | Amount |Name      |State    |
|------|--------|----------+---------+
| 1    | 16     |A         |CA       |
| 2    | 32     |B         |GA       |
| 2    | 64     |C         |NY       |
+------+--------+----------+---------+

进入:

+------+----------+----------+-------+--------+---------+--------+
| ID   | Amount_1 | Amount_2 |Name_1 | Name_2 | State_1 | State_2|
|------|----------|----------|-------+--------+---------+--------+
| 1    | 16       |          |A      |        | CA      |        |
| 2    | 32       | 64       |B      |C       | GA      | NY     |
+------+----------+----------+-------+--------+---------+--------+

1 个答案:

答案 0 :(得分:1)

使用cumcount添加一列,其中将包含新DataFrame的列名。之后,使用pivot

df['amountnr'] = 'Amount_' + df.groupby('ID').cumcount().add(1).astype(str)
df.pivot(index='ID', columns= 'amountnr', values='Amount')
#amountnr  Amount_1  Amount_2
#ID                          
#1             16.0       NaN
#2             32.0      64.0

编辑

有了新的规范,我觉得您应该使用MultiIndex,就像这样:

df['cumcount'] = df.groupby('ID').cumcount().add(1)
df.set_index(['ID', 'cumcount']).unstack()
#         Amount       Name      State     
#cumcount      1     2    1    2     1    2
#ID                                        
#1          16.0   NaN    A  NaN    CA  NaN
#2          32.0  64.0    B    C    GA   NY

如果您坚持要求,以后可以随时加入MultiIndex的列:

df2.columns = ['_'.join([coltype, str(count)]) for coltype, count in df2.columns.values]