我有一个包含两行的数据框。这两个行的“ 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 |
+------+----------+----------+-------+--------+---------+--------+
答案 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]