我有一个包含的数据表 NAME,DATE,TYPE,VALUE A,VALUE B,VALUE C,....
理论上,NAME,DATE,TYPE应该是唯一的,但事实证明它们不是,所以我需要弄清楚如何处理它。
示例输入:
Bob, 1/1/18, AType, blah, test, test2
Bob, 1/1/18, AType, blah2, test, test2
Bob, 1/1/18, BType, blah, test, test2
理想输出
Bob, 1/1/18, AType, [blah,blah2], test, test2
Bob, 1/1/18, BType, blah, test, test2
我的目标是将VALUE A值合并为JSON样式数组,然后将VALUE B和VALUE C的最后一个值合并。
我试过了:
data.groupby('NAME', 'DATE', 'TYPE').apply(lambda x: ','.join(set(x)))
但是它合并了所有的字段....或者似乎。
任何帮助?
答案 0 :(得分:1)
这似乎有效:
import pandas as pd
df = pd.DataFrame([['Bob', '1/1/18', 'AType', 'blah', 'test', 'test2'],
['Bob', '1/1/18', 'AType', 'blah2', 'test', 'test3'],
['Bob', '1/1/18', 'BType', 'blah', 'test', 'test2']],
columns=['NAME', 'DATE', 'TYPE', 'VALUE A', 'VALUE B', 'VALUE C'])
f = {'VALUE A': lambda x: set(x), 'VALUE B': 'last', 'VALUE C': 'last'}
df = df.groupby(['NAME', 'DATE', 'TYPE'])['VALUE A', 'VALUE B', 'VALUE C']\
.agg(f).reset_index()
df['VALUE A'] = df['VALUE A'].map(list)
# NAME DATE TYPE VALUE A VALUE B VALUE C
# 0 Bob 1/1/18 AType [blah2, blah] test test3
# 1 Bob 1/1/18 BType [blah] test test2