我有一个表,在连续的行中有重复的行。具有相同'id'的行在其他列中应该有重复的数据,但是很少有行中的数据不合适。例如-
id Name Age
1 Ram 12
1 Ram 10
2 Shyam 11
2 Yam 11
3 Ravi 23
3 Ravi 23
4 Harsh 34
4 Harsh 34
我需要知道连续行中各列不同的列。
我需要最终输出-
id Name Age DifferentColumn
1 Ram 12
1 Ram 10 Age
2 Shyam 11
2 Yam 11 Name
3 Ravi 23
3 Ravi 23
4 Harsh 34
4 Krish 54 Name,Age
我可以为此使用“ petl”或“ pandas”,但是我应该怎么做?
答案 0 :(得分:1)
好的,这可行
id Name Age
0 1 Ram 12
1 1 Ram 10
2 2 Shyam 11
3 2 Yam 11
4 3 Ravi 23
5 3 Ravi 23
6 4 Harsh 34
7 4 Krish 54
df['Match'] = df.groupby('id').apply(lambda x: [' ','Name,Age'] if ((len(set(x.Name)) > 1) and (len(set(x.Age)) > 1)) else [' ','Age'] if len(set(x.Age)) > 1 else [' ','Name'] if ((len(set(x.Name)) > 1)) else [' ',' ']).reset_index(name='Match').apply(lambda x: pd.Series(x.Match), axis=1).stack().reset_index(drop=True)
怎么回事
pd.groupby
按ID,然后在条件确定名称和年龄不同或相同的情况下直接输入。步骤创建如下内容
id Match
0 1 [ , Age]
1 2 [ , Name]
2 3 [ , ]
3 4 [ , Name,Age]
接下来,只需打开列表并将其堆叠起来即可。
输出
id Name Age Match
0 1 Ram 12
1 1 Ram 10 Age
2 2 Shyam 11
3 2 Yam 11 Name
4 3 Ravi 23
5 3 Ravi 23
6 4 Harsh 34
7 4 Krish 54 Name,Age