我有以下DataFrame:
import pandas as pd
data = {'id': ['A', 'B', 'C', 'D', 'E'],
'c1': [4,7,9,0,3],
'c2': [1,8,3,0,2]}
data = pd.DataFrame(data)
我想要groupby('id')
,并取c1
和c2
之间的最大值。
期望的输出:
data = {'id': ['A', 'B', 'C', 'D','E'],
'c': [4,8,9,0,3]}
data = pd.DataFrame(data)
发布于 2022-03-04 10:55:17
首先通过id
创建id
,获取每个行的最大值,然后聚合max
(如果可能的话) id
是重复的值:
df = data.set_index('id').max(axis=1).groupby(level=0).max().reset_index(name='c')
print (df)
id c
0 A 4
1 B 8
2 C 9
3 D 0
4 E 3
如果id
不像示例数据中那样重复,则删除聚合:
df = data.set_index('id').max(axis=1).reset_index(name='c')
print (df)
id c
0 A 4
1 B 8
2 C 9
3 D 0
4 E 3
发布于 2022-03-04 10:55:34
(data.melt(id_vars='id', value_name='c')
.groupby('id', as_index=False)['c'].max()
)
产出:
id c
0 A 4
1 B 8
2 C 9
3 D 0
4 E 3
发布于 2022-03-04 11:07:50
这样做有很多种方法,您不一定需要groupby,而只需要一个基于"c1“和"c2”值的新列。
我喜欢在这些情况下使用np.where:
import pandas as pd
import numpy as np
data = {'id': ['A', 'B', 'C', 'D', 'E'],
'c1': [4,7,9,0,3],
'c2': [1,8,3,0,2]}
data = pd.DataFrame(data)
data ["c"] = np.where (data["c1"] >= data["c2"], data ["c1"], data["c2"])
del data ["c1"]
del data ["c2"]
第一个参数是要评估的条件,第二个参数是条件匹配时的返回值,第三个参数是"else“。
https://stackoverflow.com/questions/71350347
复制相似问题