我基本上有一个文件,如
Name Day1 Day2 Day3
Abe 1 2 3
Ben 2 2 1
Cat 2 3 2
我有“更新文件”格式
Name Day3 Day4
Abe 4 0
Dan 6 3
所以我需要跟踪哪些行水平延伸,哪些行垂直延伸,哪些行延伸。在excel中,这基本上就像将每个数据集拆分为4,并将数据粘贴到适当的位置。
我是一个黑客攻击解决方案,但我觉得NumPy或Pandas或其他套件可能有很好的工具用于此目的?
编辑:“更新”文件始终包含更多最新信息,因此它们包含的任何内容都会覆盖原始文件。如果有帮助,可以计算更新文件,对于任何名称/日组合,总是具有更高的数字。
答案 0 :(得分:2)
如何使用pandas
:
>>> updated = orig.append(new).groupby('Name').last().fillna(0)
>>> updated
Day1 Day2 Day3 Day4
Name
Abe 1 2 4 0
Ben 2 2 1 0
Cat 2 3 2 0
Dan 0 0 6 3
首先,读入数据(这取决于格式的细节):
>>> orig = pd.read_csv("days1.txt", delim_whitespace=True)
>>> new = pd.read_csv("days2up.txt", delim_whitespace=True)
>>> orig
Name Day1 Day2 Day3
0 Abe 1 2 3
1 Ben 2 2 1
2 Cat 2 3 2
>>> new
Name Day3 Day4
0 Abe 4 0
1 Dan 6 3
然后附加新数据,自动扩展列:
>>> orig.append(new)
Day1 Day2 Day3 Day4 Name
0 1 2 3 NaN Abe
1 2 2 1 NaN Ben
2 2 3 2 NaN Cat
0 NaN NaN 4 0 Abe
1 NaN NaN 6 3 Dan
按名称列合并,取最后一个有效值(最初我担心这会失去Abe的Day1和Day2信息,但事实并非如此):
>>> orig.append(new).groupby("Name").last()
Day1 Day2 Day3 Day4
Name
Abe 1 2 4 0
Ben 2 2 1 NaN
Cat 2 3 2 NaN
Dan NaN NaN 6 3
将缺失值替换为0:
>>> orig.append(new).groupby("Name").last().fillna(0)
Day1 Day2 Day3 Day4
Name
Abe 1 2 4 0
Ben 2 2 1 0
Cat 2 3 2 0
Dan 0 0 6 3
最后写出:
>>> updated = orig.append(new).groupby("Name").last().fillna(0)
>>> updated.to_csv("updated.csv")
>>> !cat updated.csv
Name,Day1,Day2,Day3,Day4
Abe,1.0,2.0,4,0.0
Ben,2.0,2.0,1,0.0
Cat,2.0,3.0,2,0.0
Dan,0.0,0.0,6,3.0
答案 1 :(得分:0)