Python Pandas 添加带有相关订单号的列
Python Pandas add column with relative order numbers
如何向现有 DataFrame 添加订单号列?
这是我的 DataFrame:
import pandas as pd
import math
frame = pd.DataFrame([[1, 4, 2], [8, 9, 2], [10, 2, 1]], columns=['a', 'b', 'c'])
def add_stats(row):
row['sum'] = sum([row['a'], row['b'], row['c']])
row['sum_sq'] = sum(math.pow(v, 2) for v in [row['a'], row['b'], row['c']])
row['max'] = max(row['a'], row['b'], row['c'])
return row
frame = frame.apply(add_stats, axis=1)
print(frame.head())
结果数据为:
a b c sum sum_sq max
0 1 4 2 7 21 4
1 8 9 2 19 149 9
2 10 2 1 13 105 10
首先,我想添加 3 个带有订单号的额外列,分别按总和、sum_sq 和最大值排序。接下来,这 3 列应合并为一列 - 订单号的平均值 - 但我确实知道如何做那部分(使用 apply 和 axis=1)。
我认为您正在寻找 rank
,其中您提到了 sorting
。根据您的示例,添加:
frame['sum_order'] = frame['sum'].rank()
frame['sum_sq_order'] = frame['sum_sq'].rank()
frame['max_order'] = frame['max'].rank()
frame['mean_order'] = frame[['sum_order', 'sum_sq_order', 'max_order']].mean(axis=1)
获得:
a b c sum sum_sq max sum_order sum_sq_order max_order mean_order
0 1 4 2 7 21 4 1 1 1 1.000000
1 8 9 2 19 149 9 3 3 2 2.666667
2 10 2 1 13 105 10 2 2 3 2.333333
rank 方法也有一些选项,例如在相同或 NA 值的情况下指定行为。
如何向现有 DataFrame 添加订单号列?
这是我的 DataFrame:
import pandas as pd
import math
frame = pd.DataFrame([[1, 4, 2], [8, 9, 2], [10, 2, 1]], columns=['a', 'b', 'c'])
def add_stats(row):
row['sum'] = sum([row['a'], row['b'], row['c']])
row['sum_sq'] = sum(math.pow(v, 2) for v in [row['a'], row['b'], row['c']])
row['max'] = max(row['a'], row['b'], row['c'])
return row
frame = frame.apply(add_stats, axis=1)
print(frame.head())
结果数据为:
a b c sum sum_sq max
0 1 4 2 7 21 4
1 8 9 2 19 149 9
2 10 2 1 13 105 10
首先,我想添加 3 个带有订单号的额外列,分别按总和、sum_sq 和最大值排序。接下来,这 3 列应合并为一列 - 订单号的平均值 - 但我确实知道如何做那部分(使用 apply 和 axis=1)。
我认为您正在寻找 rank
,其中您提到了 sorting
。根据您的示例,添加:
frame['sum_order'] = frame['sum'].rank()
frame['sum_sq_order'] = frame['sum_sq'].rank()
frame['max_order'] = frame['max'].rank()
frame['mean_order'] = frame[['sum_order', 'sum_sq_order', 'max_order']].mean(axis=1)
获得:
a b c sum sum_sq max sum_order sum_sq_order max_order mean_order
0 1 4 2 7 21 4 1 1 1 1.000000
1 8 9 2 19 149 9 3 3 2 2.666667
2 10 2 1 13 105 10 2 2 3 2.333333
rank 方法也有一些选项,例如在相同或 NA 值的情况下指定行为。