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)