![](/img/trans.png)
[英]Creating Dictionary from Pandas DataFrame Column Based on Unique Values in Column
[英]Pandas Dataframe creating a unique column
我想添加每列,作為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 + credit_amount = credit_amount + duration
。 我不想重復列。 期望這個函數的結果:
我該怎么做?
我試圖使用哈希集,但似乎只適用於熊貓系列[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("---------------------------")
這會將列組合打印在一起。 所以我只是在軸= 1上總結它並在pd.series下調用它,並通過加入它們給它一個名字。
發布此信息只需將它們附加到列表中並在軸= 1上連接它們以獲得最終結果。 :)
您已經指向了itertools.combinations
,這是正確的工具,並且會為您節省一些循環和重復列的問題。 有關排列,組合等的更多詳細信息,請參閱文檔 。
首先,讓我們創建DataFrame,以便我們可以重現這個例子:
import pandas as pd
from itertools import combinations
df = pd.DataFrame({
'a': [1,2,3],
'b': [4,5,6],
'c': [7,8,9]
})
>>> df
a b c
0 1 4 7
1 2 5 8
2 3 6 9
現在讓我們開始工作吧。 我們的想法是獲取列的所有combinations
,然后執行字典理解以返回類似{column_name: sum}
。 這里是:
>>> pd.DataFrame({c1 + '_sum_' + c2: df[c1] + df[c2]
for c1, c2 in combinations(df.columns, 2)})
a_sum_b a_sum_c b_sum_c
0 5 8 11
1 7 10 13
2 9 12 15
請注意,您可以將sum
替換為在兩個pd.Series
上運行的任何其他函數。
該函數可以有一個if條件來檢查關聯添加是否已作為列添加到數據框,如下所示:
def automate_add(add):
columnLst=[]
#list where we will add column names to avoid the associate sum columns
for i, column in enumerate(df):
for j, operando in enumerate(df):
if column != operando:
if operando + '_sum_' + column not in columnLst:
columnName = column + '_sum_' + operando
add[columnName] = df[column] + df[operando]
columnLst.append(columnName)
我沒有在你的數據上測試過這個。 如果它不起作用,請嘗試告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.