根据其他列的条件创建新列
Creating a new columns based on conditions from other columns
我有一个类似这样的数据框:
Max Min Id
1 10 5 AAA
2 15 10 AAB
3 10 7 AAC
4 20 15 AAD
5 15 10 AAE
我想在数据框中添加另一列,条件是最大值和最小值相同,因此 AAB 行和 AAE 行将具有相同的“分类”或“系列”。
我会有这样的东西:
Max Min Id Family
1 10 5 AAA J
2 15 10 AAB K
3 10 7 AAC L
4 20 15 AAD M
5 15 10 AAE K
最好的方法是什么?
具有相同最大值和最小值的记录将具有相同的家族编号。
使用 apply 可能会使较大的数据帧变慢
def func(row):
return df.loc[(df['Max']==row['Max']) & (df['Min']==row['Min'])]['Max'].idxmin()
df['Family'] = df.apply(func, axis=1)
Max Min Family
0 10 5 0
1 15 10 1
2 10 7 2
3 20 15 3
4 15 10 1
编辑:
更快的方法来做同样的事情
df['idx'] = df.groupby(['Max', 'Min']).ngroup()
我有一个类似这样的数据框:
Max Min Id
1 10 5 AAA
2 15 10 AAB
3 10 7 AAC
4 20 15 AAD
5 15 10 AAE
我想在数据框中添加另一列,条件是最大值和最小值相同,因此 AAB 行和 AAE 行将具有相同的“分类”或“系列”。
我会有这样的东西:
Max Min Id Family
1 10 5 AAA J
2 15 10 AAB K
3 10 7 AAC L
4 20 15 AAD M
5 15 10 AAE K
最好的方法是什么?
具有相同最大值和最小值的记录将具有相同的家族编号。
使用 apply 可能会使较大的数据帧变慢
def func(row):
return df.loc[(df['Max']==row['Max']) & (df['Min']==row['Min'])]['Max'].idxmin()
df['Family'] = df.apply(func, axis=1)
Max Min Family
0 10 5 0
1 15 10 1
2 10 7 2
3 20 15 3
4 15 10 1
编辑: 更快的方法来做同样的事情
df['idx'] = df.groupby(['Max', 'Min']).ngroup()