我想添加每一列,如 duration + credit_amount
,所以我创建了以下算法:
def automate_add(add):
for i, column in enumerate(df):
for j, operando in enumerate(df):
if column != operando:
columnName = column + '_sum_' + operando
add[columnName] = df[column] + df[operando]
输出:
- duration_sum_credit_amount
- duration_sum_installment_commitment
- credit_amount_sum_duration
- credit_amount_sum_installment_commitment
- installment_commitment_sum_duration
- installment_commitment_sum_credit_amount
但是,知道 duration + credit_amount = credit_amount + duration
。我不想有重复的专栏。
期待函数的结果:
- duration_sum_credit_amount
- duration_sum_installment_commitment
- credit_amount_sum_installment_commitment
我该怎么做?
我正在尝试使用哈希集,但似乎只适用于 pandas 系列 [1] .
编辑: 数据框:https://www.openml.org/d/31
最佳答案
使用下面的,应该工作得更快:
import itertools
my_list=[(pd.Series(df.loc[:,list(i)].sum(axis=1),\
name='_sum_'.join(df.loc[:,list(i)].columns))) for i in list(itertools.combinations(df.columns,2))]
final_df=pd.concat(my_list,axis=1)
print(final_df)
duration_sum_credit_amount duration_sum_installment_commitment \
0 1175 10
1 5999 50
2 2108 14
3 7924 44
4 4894 27
credit_amount_sum_installment_commitment
0 1173
1 5953
2 2098
3 7884
4 4873
解释:
print(list(itertools.combinations(df.columns,2)))
给出:
[('duration', 'credit_amount'),
('duration', 'installment_commitment'),
('credit_amount', 'installment_commitment')]
发布:
for i in list(itertools.combinations(df.columns,2)):
print(df.loc[:,list(i)])
print("---------------------------")
这会将列的组合打印在一起。所以我只是在 axis=1 上求和并在 pd.series 下调用它,并通过加入它们给它命名。
发布这个只是将它们附加到列表中并在 axis=1 上连接它们以获得最终结果。 :)
关于python - Pandas Dataframe 创建一个独特的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54735970/