Python,合并一列中具有相同值的行 [英] Python, Merging rows with same value in one column
本文介绍了Python,合并一列中具有相同值的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的数据框如下所示:
ID Class
0 9
1 8
1 6
2 6
2 2
3 15
3 1
3 8
我想做的是通过以下方式合并具有相同 ID 值的行:
What I would like to do is merging rows with same ID value in a way below:
ID Class1 Class2 Class3
0 9
1 8 6
2 6 2
3 15 1 8
因此,对于每个存在不止一次的 ID,我想创建新列并将值从行移动到这些列.执行此操作的最快方法是什么?我尝试使用 groupby
但它没有给我合适的结果.
So for each ID which exists more than once, I want to create new column(s) and move values from rows to those columns. What is the fastest way to do this? I tried using groupby
but it didn't give me appriopate results.
推荐答案
使用 set_index
和 cumcount
用于新列,通过 unstack
和最后通过 add_prefix
:
df = df.set_index(['ID', df.groupby('ID').cumcount()])['Class']
.unstack()
.add_prefix('Class')
.reset_index()
print (df)
ID Class0 Class1 Class2
0 0 9.0 NaN NaN
1 1 8.0 6.0 NaN
2 2 6.0 2.0 NaN
3 3 15.0 1.0 8.0
另一种解决方案是为每个组创建list
,然后通过构造函数创建新的DataFrame
:
Another solution is create list
per groups and then new DataFrame
by constructor:
s = df.groupby('ID')['Class'].apply(list)
df = pd.DataFrame(s.values.tolist(), index=s.index)
.add_prefix('Class')
.reset_index()
print (df)
ID Class0 Class1 Class2
0 0 9 NaN NaN
1 1 8 6.0 NaN
2 2 6 2.0 NaN
3 3 15 1.0 8.0
df = df.set_index('ID')
df1=pd.get_dummies(df['Class']).reindex(columns=range(17), fill_value=0).add_prefix('Class')
df1 = df1.groupby(level=0).max().reset_index()
print (df1)
ID Class0 Class1 Class2 Class3 Class4 Class5 Class6 Class7 Class8 \
0 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 1 0 1
2 2 0 0 1 0 0 0 1 0 0
3 3 0 1 0 0 0 0 0 0 1
Class9 Class10 Class11 Class12 Class13 Class14 Class15 Class16
0 1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 1 0
这篇关于Python,合并一列中具有相同值的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文