Python panda数据帧中的拆分和分组

Python panda数据帧中的拆分和分组,python,pandas,Python,Pandas,假设我有Panda DataFrame,它如下所示: 输入 我想按键拆分,按名称分组 输出 你能给我一个建议吗 下面是生成数据帧的代码 import pandas as pd # Initializing the nested list with Data-set data = [['David','A',1], ['Roe','B',2], ['John','A',3], ['Nat','B',4]] df = pd.DataFrame(data

假设我有Panda DataFrame,它如下所示:

输入 我想按键拆分,按名称分组

输出 你能给我一个建议吗

下面是生成数据帧的代码

import pandas as pd
# Initializing the nested list with Data-set
data = [['David','A',1],
        ['Roe','B',2],
        ['John','A',3],
        ['Nat','B',4]]
df = pd.DataFrame(data, columns=['Name', 'Key','Val'])

使用如下重塑,
set_index
使用名称和键创建多索引,然后
unstack
最内层的索引级别创建列:

df.set_index(['Name','Key'])['Val'].unstack()
输出:

Key      A    B
Name           
David  1.0  NaN
John   3.0  NaN
Nat    NaN  4.0
Roe    NaN  2.0
输入数据示例:

data = {"Id": ["DA0445EA", "DA0445EA", "DA0445EA", "DA0445EA", "DA0445EA"],
        "Port" : [1,1,1,1,1],
        "Lane" :[None,None,None,None,None],
        "Key" : ["start_now", "start","case","case_start","end"],
        #"val": [0.000001,0.2,0.3,0.4,0.5]
        "Val":[0.000001,0.2,0.3,0.4,0.5] #need to capitalize this 'val' to match dataframe definition below
        }
df = pd.DataFrame(data,columns=['Id', 'Port','Lane','Key','Val'])
df1 = df.set_index(['Id', 'Port','Lane','Key'])['Val'].unstack()
df1 = df1.reset_index()
预期输出:

身份证件 港口 小巷 现在就开始 开始 案例 案例开始 结束 DA0445EA 1. 楠 0.000001 0.2 0.3 0.4 0.5 下面是生成的错误。原因是“同一id有两个重复条目”。对于我正在处理的数据表,这样的输入是不可避免的。我原以为,它会覆盖表中的同一行,并且不会抛出下面这样的错误

raise ValueError('Index contains duplicate entries, '
ValueError: Index contains duplicate entries, cannot reshape

有没有办法避免在重新成型过程中出现这种错误?

答案很好。假设初始表中有4列。第四栏写“评论”。但是我仍然希望分割表是df.set_index(['Name','Key'])['Val'].unstack()。我想放弃“评论”栏。在这种情况下,它将出错。嗯……我认为一种方法是清除那些不必要的列,然后使用您建议的方法。但不确定是否有方法应用上述方法,而不删除拆分表中不需要的列。如果您有额外的列,可以将它们添加到索引中,以将这些信息保留在键前的名称之后。嗨,斯科特-感谢您的帮助。我仍然面临着一些问题,我在下面总结了这些问题。你能在有空的时候发表一些评论吗。谢谢,DibI编辑了您的解决方案。您需要大写“val”以匹配数据帧构造函数中的列,这就是为什么要使用NaN。Scott非常有用。我面临另一个问题(希望是最后一个)。下面是我给出的情景。啊。。现在这个重复的entrie错误导致了一个完全不同的解决方案。您需要使用某种聚合来创建groupby或pivot_表。请看这篇文章()。谢谢你的帮助。最后,我可以使用pivot使其工作。
data = {"Id": ["DA0445EA", "DA0445EA", "DA0445EA", "DA0445EA", "DA0445EA"],
        "Port" : [1,1,1,1,1],
        "Lane" :[None,None,None,None,None],
        "Key" : ["start_now", "start","case","case_start","end"],
        #"val": [0.000001,0.2,0.3,0.4,0.5]
        "Val":[0.000001,0.2,0.3,0.4,0.5] #need to capitalize this 'val' to match dataframe definition below
        }
df = pd.DataFrame(data,columns=['Id', 'Port','Lane','Key','Val'])
df1 = df.set_index(['Id', 'Port','Lane','Key'])['Val'].unstack()
df1 = df1.reset_index()
import pandas as pd
data = {"Id": ["DA0445EA", "DA0445EA", "DA0445EA", "DA0445EA", "DA0445EA"],
        "Port" : [1,1,1,1,1],
        "Lane" :[None,None,None,None,None],
        "Key" : ["start", "start","case","case_start","end"],
        "Val":[0.1,0.1,0.3,0.4,0.5] 
        }
df = pd.DataFrame(data,columns=['Id', 'Port','Lane','Key','Val'])
df1 = df.set_index(['Id', 'Port','Lane','Key'])['Val'].unstack()
df1 = df1.reset_index()
raise ValueError('Index contains duplicate entries, '
ValueError: Index contains duplicate entries, cannot reshape