Python 如何标记相同的数据帧行?
我有这样一个大熊猫数据框:Python 如何标记相同的数据帧行?,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有这样一个大熊猫数据框: log apple watermelon orange lemon grapes 1 1 1 yes 0 0 1 2 0 1 0 0 1 True 0 0 0 2 2 0 0 0 0 2 2 1
log apple watermelon orange lemon grapes
1 1 1 yes 0 0
1 2 0 1 0 0
1 True 0 0 0 2
2 0 0 0 0 2
2 1 1 yes 0 0
2 0 0 0 0 2
2 0 0 0 0 2
3 True 0 0 0 2
4 0 0 0 0 2.1
4 0 0 0 0 2.1
如何标记相同的行,例如:
log apple watermelon orange lemon grapes ID
1 1 1 yes 0 0 1
1 2 0 1 0 0 2
1 True 0 0 0 2 3
2 0 0 0 0 2 4
2 1 1 yes 0 0 1
2 0 0 0 0 2 4
2 0 0 0 0 2 4
3 True 0 0 0 2 3
4 0 0 0 0 2.1 5
4 0 0 0 0 2.1 5
我试图:
df['ID']=df.groupby('log')[df.columns].transform('ID')
及
但是,上面的内容不起作用,因为我确实有很多专栏
但它并没有给我预期的产出。知道如何对该数据帧进行分组和标记吗?已给出
x = io.StringIO("""log apple watermelon orange lemon grapes
1 1 1 yes 0 0
1 2 0 1 0 0
1 True 0 0 0 2
2 0 0 0 0 2
2 1 1 yes 0 0
2 0 0 0 0 2
2 0 0 0 0 2
3 True 0 0 0 2
4 0 0 0 0 2.1
4 0 0 0 0 2.1""")
df2 = pd.read_table(x, delim_whitespace=True)
您可以首先使用tuple的transform
,使每一行都具有哈希性和可比性,然后使用索引和range
创建唯一的ID
f = df2.transform(tuple,1).to_frame()
k = f.groupby(0).sum()
k['id'] = range(1,len(k.index)+1)
最后
df2['temp_key'] = f[0]
df2 = df2.set_index('temp_key')
df2['id'] = k.id
df2.reset_index().drop('temp_key', 1)
log apple watermelon orange lemon grapes id
0 1 1 1 yes 0 0.0 1
1 1 2 0 1 0 0.0 2
2 1 True 0 0 0 2.0 3
3 2 0 0 0 0 2.0 4
4 2 1 1 yes 0 0.0 5
5 2 0 0 0 0 2.0 4
6 2 0 0 0 0 2.0 4
7 3 True 0 0 0 2.0 6
8 4 0 0 0 0 2.1 7
9 4 0 0 0 0 2.1 7
这里已经回答:是的,但问题是我有500列@skrubery你可能想看看和Pandas函数。非常感谢。。。但由于某种原因,我的id列中充满了
NaN
values@tumbleweed这很奇怪。你一步一步地运行代码了吗?也许你能在这个过程中发现一些错误?让我们这样说吧:最后,你的k.id
应该是一系列id,你的df
应该有与kI试图检查问题相同的索引,但显然k.id
不起作用。@tumbweed不看数据就很难诊断:/但这种代码/方法有效。也许你有一些不同的索引或一两个细节会有所不同,但想法是应该这样adaptable@tumbleweed你说的“感动”是什么意思?日志列相同:)
df2['temp_key'] = f[0]
df2 = df2.set_index('temp_key')
df2['id'] = k.id
df2.reset_index().drop('temp_key', 1)
log apple watermelon orange lemon grapes id
0 1 1 1 yes 0 0.0 1
1 1 2 0 1 0 0.0 2
2 1 True 0 0 0 2.0 3
3 2 0 0 0 0 2.0 4
4 2 1 1 yes 0 0.0 5
5 2 0 0 0 0 2.0 4
6 2 0 0 0 0 2.0 4
7 3 True 0 0 0 2.0 6
8 4 0 0 0 0 2.1 7
9 4 0 0 0 0 2.1 7