【问题标题】:Pandas, combine unique value from two column into one column while preserving order熊猫,将两列中的唯一值合并为一列,同时保留顺序
【发布时间】:2021-02-27 18:06:09
【问题描述】:

我在四列中有数据,如下所示。第 1 列中存在一些值,第 1 列中的某些值再次在第 3 列中重复。我想将第 1 列与第 3 列合并,同时从第 3 列中删除重复项。我还想保留订单的列。第 1 列与第 2 列相关联,第 3 列与第 4 列相关联,所以如果我可以在合并期间将第 1 列项与第 2 列一起移动,将第 3 列项与第 4 列一起移动,那就太好了。任何帮助将不胜感激。

输入表:

Item Price Item Price
Car 105 Truck 54822
Chair 20 Pen 1
Cup 2 Car 105
Glass 1

输出表:

Item Price
Car 105
Chair 20
Cup 2
Truck 54822
Pen 1
Glass 1

提前谢谢你。

【问题讨论】:

  • 你好。请将相关数据显示为问题中的文本,而不是图片链接。
  • @gupta - 您的第 1 列已排序。如果未排序,您是否还希望保留第 1 列的顺序

标签: python-3.x pandas dataframe csv data-analysis


【解决方案1】:

将输入表分成左右两部分后,我们可以使用boolean indexing 非常简单地将左侧项目与未重复的右侧项目连接起来:

import pandas as pd

# this initial section only recreates your sample input table
from io import StringIO
input = pd.read_table(StringIO("""| Item  | Price | Item | Price |
|-------|-------|------|-------|
| Car   | 105   | Truck| 54822 |
| Chair |  20   | Pen  |     1 |
| Cup   |   2   | Car  |   105 |
|       |       | Glass|     1 |
"""), ' *\| *', engine='python', usecols=[1,2,3,4], skiprows=[1], keep_default_na=False)
input.columns = list(input.columns[:2])*2

# now separate the input table into the left and right part
left  = input.iloc[:,:2].replace("", pd.NA).dropna().set_index('Item')
right = input.iloc[:,2:]                            .set_index('Item')
# finally construct the output table by concatenating without duplicates
output = pd.concat([left, right[~right.index.isin(left.index)]])

       Price
Item        
Car      105
Chair     20
Cup        2
Truck  54822
Pen        1
Glass      1

【讨论】:

  • 亲爱的 Armali, 非常感谢您的热心帮助。它工作完美。由于分数低,我无法投票,但一旦我获得足够的分数,我就会投票。非常感谢。最良好的祝愿。古普塔
  • 我有一个问题,如果我想对第 5、6、7 和 8 列重复相同的操作,我需要进行哪些更改?提前致谢。
  • 您想要它吗 A) 仅用于第 5、6、7 和 8 列,或 B) 用于合并所有列对 1&2、3&4、5&6 和 7&8在一个输出列对中?
  • 还有哪些列可以包含上面1&2这样的空格?
  • 感谢您的回复。实际上,我有一些大文件(每个文件有 2400 列),并且想做同样的事情,比如第 1-4 列,5-8、9-12 等等。因此,如果您指导我如何仅对第 5、6、7 和 8 列执行“A)”,这将非常有帮助。提前致谢。
猜你喜欢
  • 2018-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-08
  • 1970-01-01
相关资源
最近更新 更多