【问题标题】:pandas Dataframe, MOVE Specific Value from One Cell to Anotherpandas Dataframe,将特定值从一个单元格移动到另一个单元格
【发布时间】:2018-04-22 10:20:56
【问题描述】:

我希望能够复制过敏列下的值,共有三种语言。我想使用 pandas Dataframes 将特定的单元格值数据从英语行移动到其上方的法语和下方的荷兰语。并且在它被复制之后,我想删除英语行。

注意:索引是以下语言。它们按法语、英语、荷兰语、法语、英语、荷兰语等顺序排列。每个值都是在过敏列下给出的典型反应

Index       allergy 

french      ''

english     'MAY CONTAIN: prawn' 

dutch       ''

french      ''

english     'MAY CONTAIN: peanuts'

dutch       ''

french      ''

english     'MAY CONTAIN: milk'

dutch       ''

再次总结一下,将特定的单元格值从英语复制到荷兰语和法语行。

编辑:我不能再使用 cmets:是的,这是该数据集的模式。此输出显示在 excel 文件中。

期望的输出:

Index        allergy 

french      'MAY CONTAIN: prawn'

english     'MAY CONTAIN: prawn'  # remove

dutch       'MAY CONTAIN: prawn'

french      'MAY CONTAIN: peanuts' 

english     'MAY CONTAIN: peanuts'  # remove

dutch       'MAY CONTAIN: peanuts'

french      'MAY CONTAIN: milk'

english     'MAY CONTAIN: milk'  # remove

dutch       'MAY CONTAIN: milk'

之后应该是这个样子

最终输出:

Index        allergy 

french      'MAY CONTAIN: prawn'

dutch       'MAY CONTAIN: prawn'

french      'MAY CONTAIN: peanuts' 

dutch       'MAY CONTAIN: peanuts'

french      'MAY CONTAIN: milk'

dutch       'MAY CONTAIN: milk'

【问题讨论】:

  • 您可以添加数据样本 - 5、6 行的所需输出吗?
  • 我已更新以显示所需的输出@jezrael
  • 好的,谢谢。但是试着想象你想用可以看到的数据来解决这个问题。可能吗?我认为不是 :( 因为我认为您的真实数据不同,并不总是全部为空值。或者只需要复制列 english 2 次?我认为创建 mcve 应该会有所帮助。
  • 还输入的是带有列表的数据框吗? print (df.head()) 是什么?
  • 这是非常有用的编辑。给他们一些时间。

标签: python pandas numpy


【解决方案1】:

仅过滤english 行并创建默认索引:

df1 = df.loc['english'].reset_index(drop=True)
print (df1)
                  allergy
0    'MAY CONTAIN: prawn'
1  'MAY CONTAIN: peanuts'
2     'MAY CONTAIN: milk'

然后concat两次,排序并最后删除第二级:

df = (pd.concat([df1, df1], keys=('french','dutch'))
        .sort_index(level=1)
        .reset_index(level=1, drop=True)
      )
print (df)
                       allergy
french    'MAY CONTAIN: prawn'
dutch     'MAY CONTAIN: prawn'
french  'MAY CONTAIN: peanuts'
dutch   'MAY CONTAIN: peanuts'
french     'MAY CONTAIN: milk'
dutch      'MAY CONTAIN: milk'

【讨论】:

  • 我收到了TypeError: sort_index() got an unexpected keyword argument 'level'
  • 你的熊猫版本是什么? print (pd.show_versions()) ?
  • 版本是0.16.2,我的项目需要它
  • 找到了,需要把.sort_index(level=1)改成.sortlevel(level=1)
  • 我能再问一件事吗?是否可以选择过敏列。即在 excel 中,它在 D(allergy) 中显示过敏列。所以我只希望更改 D 列(过敏),在这种情况下,更改而不是更改其余列。索引是 B 列。