Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何标记相同的数据帧行?_Python_Python 3.x_Pandas - Fatal编程技术网

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