【问题标题】:How to label same pandas dataframe rows?如何标记相同的熊猫数据框行?
【发布时间】:2018-06-22 05:18:29
【问题描述】:

我有一个像这样的大熊猫数据框:

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')

df['personid'] = df['log'].clip_upper(2) - 2*d.duplicated(subset='apple')
df

但是,上面的方法不起作用,因为我确实有很多列。

但它没有给我预期的输出。知道如何对这个数据框进行分组和标记吗?

【问题讨论】:

标签: python python-3.x pandas


【解决方案1】:

给定

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)

您可以先使用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

【讨论】:

  • 非常感谢...但由于某种原因,我的 id 列充满了NaN
  • @tumbleweed 这很奇怪。你有没有一步步运行代码?也许您可以在此过程中发现问题?这么说吧:最后,你k.id应该是一系列id,你的df应该和k有相同的索引
  • 我试图检查问题,但显然k.id 不起作用..
  • @tumbleweed 不看数据就很难诊断:/但是这个代码/方法有效。也许你有一些不同的索引或一两个不同的细节,但想法是它应该是适应性的
  • @tumbleweed “感动”是什么意思?日志列是相同的:)
猜你喜欢
  • 2016-10-23
  • 2023-01-19
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
相关资源
最近更新 更多