获取具有重复值的行的第一个版本,而不是一列

2024-04-25 12:13:25 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,我正在寻找一种从数据帧df获取数据的方法:

  df = pd.DataFrame(dict(X=list('abbcccddef'),
                         Y=list('ABCDEFGHIJ'),
                         Z=list('1234123412')))
  df
  #    X  Y  Z
  # 0  a  A  1
  # 1  b  B  2
  # 2  b  C  3
  # 3  c  D  4
  # 4  c  E  1
  # 5  c  F  2
  # 6  d  G  3
  # 7  d  H  4
  # 8  e  I  1
  # 9  f  J  2

每个X值只有第一行,所以这个:

  #    X  Y  Z
  # 0  a  A  1
  # 1  b  B  2
  # 3  c  D  4
  # 6  d  G  3
  # 8  e  I  1
  # 9  f  J  2

我在寻找一种比这更优雅的方式:

  x_unique = df.X.unique()
  x_unique
  # array(['a', 'b', 'c', 'd', 'e', 'f'], dtype=object)

  res = df[df.X == x_unique[0]].iloc[0]
  for u in x_unique[1:]:
      res = pd.concat([res, df[df.X==u].iloc[0]], axis=1)

  res
  #    0  1  3  6  8  9
  # X  a  b  c  d  e  f
  # Y  A  B  D  G  I  J
  # Z  1  2  4  3  1  2

  res = res.transpose()
  res
  #    X  Y  Z
  # 0  a  A  1
  # 1  b  B  2
  # 3  c  D  4
  # 6  d  G  3
  # 8  e  I  1
  # 9  f  J  2

Tags: 数据方法dataframedf方式resarraydict
2条回答

您可以在X上使用drop_duplicates()方法

In [60]: df.drop_duplicates('X')
Out[60]:
   X  Y  Z
0  a  A  1
1  b  B  2
3  c  D  4
6  d  G  3
8  e  I  1
9  f  J  2

您还可以执行以下操作:

In [3]: import pandas as pd

In [4]: df = pd.DataFrame(dict(X=list('abbcccddef'),
                  Y=list('ABCDEFGHIJ'),
                   Z=list('1234123412')))

In [5]: df.groupby('X').first()
Out[5]: 
   Y  Z
X      
a  A  1
b  B  2
c  D  4
d  G  3
e  I  1
f  J  2

相关问题 更多 >