Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建新的参考数据帧_Python_Python 2.7_Dataframe - Fatal编程技术网

Python 创建新的参考数据帧

Python 创建新的参考数据帧,python,python-2.7,dataframe,Python,Python 2.7,Dataframe,最简单的方法是什么(数据帧): 为此: referenceID value1 values2 1 100 200 1 500 400 2 100 200 2 300 400 以及第二数据帧,其具有: referenceID Project Folder Owner 1 A B C 2

最简单的方法是什么(数据帧):

为此:

referenceID   value1 values2
  1             100    200
  1             500    400
  2             100    200
  2             300    400
以及第二数据帧,其具有:

referenceID Project Folder Owner 
1             A       B      C
2             D       E      F

我考虑过使用标签编码器,但这需要我将“Project、Folder和Owner”连接到一个新字段中——只要我保留原始文件就可以了,但这似乎是额外的不必要的工作。

您可以使用groupby在原始项目、Folder和Owner上创建第二个数据帧。然后创建索引的唯一值列表,并将这些值输入到新的数据帧中。假设原始数据位于名为df的数据帧中:

df2 = df.groupby(['Project', 'Folder', 'Owner']).agg('sum')
df3 = pd.DataFrame([list(df2.index.unique().tolist()[x]) for x in range(len(df2.index.unique().tolist()))], columns=df2.index.name)
df3.insert(0, 'ReferenceId', df3.index + 1)
结果如下所示(您需要的第二个数据帧):


这将生成您要查找的输出

m = [['A', 'B', 'C', 100, 200],
     ['A', 'B', 'C', 500, 400],
     ['D', 'E', 'F', 100, 200],
     ['D', 'E', 'F', 300, 400]]

owner = {}
for row in m:
    key = tuple(row[:3])
    if key in owner:
        owner[key].append(row[3:])
    else:
        owner[key] = [row[3:]]

frame1 = []
frame2 = []
for i, key in enumerate(owner):
    frame2.append([i] + list(key))
    for row in owner[key]:
        frame1.append([i] + list(row))


print frame1
print frame2

要选择列,如果知道列的编号,请使用内置调用,否则请使用
.ix
方法:

%timeit df.loc[:,['value1','values2']]
out: 1000 loops, best of 3: 602 µs per loop

%timeit df[[3,4]]
out: 1000 loops, best of 3: 295 µs per loop

%timeit df.ix[:,['value1','values2']]
1000 loops, best of 3: 412 µs per loop
至于groupby,我们只需使用groupby:

df.groupby(['Project','Folder','Owner'],as_index = False).sum().drop(['value1','values2'],1)

我同意。但您假设用户熟悉熊猫。我的解决方案只依赖于标准库。是的,我在这个问题上提到了数据框架。我没有否决你的投票。这里是参考ID?如何用它更新原始数据帧?
%timeit df.loc[:,['value1','values2']]
out: 1000 loops, best of 3: 602 µs per loop

%timeit df[[3,4]]
out: 1000 loops, best of 3: 295 µs per loop

%timeit df.ix[:,['value1','values2']]
1000 loops, best of 3: 412 µs per loop
df.groupby(['Project','Folder','Owner'],as_index = False).sum().drop(['value1','values2'],1)