python - Pandas Dataframe 创建一个独特的列

标签 python pandas dataframe

我有这个数据框: enter image description here

我想添加每一列,如 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]

输出:

enter image description here

  1. duration_sum_credit_amount
  2. duration_sum_installment_commitment
  3. credit_amount_sum_duration
  4. credit_amount_sum_installment_commitment
  5. installment_commitment_sum_duration
  6. installment_commitment_sum_credit_amount

但是,知道 duration + credit_amount = credit_amount + duration。我不想有重复的专栏。 期待函数的结果:

  1. duration_sum_credit_amount
  2. duration_sum_installment_commitment
  3. 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/

相关文章:

python - Pandas - 在另一列中查找具有相同值的行中的一列中的重复条目

python-3.x - 如何执行条件数据框操作?

python - 向 pandas 数据框添加方法

r - 检查 data.frame 列中的任何值是否为空

python - 正则表达式匹配所有单词序列

Python Pandas 如何找到同时出现的顶级字符串?

python - 用最少的内存连接 Numpy 数组

python - 在 df.apply() 中的自定义函数中传递 Pandas DataFrame 中的不同列

python - 如何根据一列的字符串相似度链接两个数据框

r - (R) 数据帧的 for 循环不起作用