[英]Python Multiplying many columns in a Dataframe on many columns
謝謝你的幫助。 我正在嘗試將幾列與其他幾列相乘以創建 6 個新列(A C、A D、A E、B C、B D、 BE),在此示例中。 如您所見,有一個日期類型索引和一個 id 列。 此表只是一個更大的 Dataframe 的示例。
id A B C D E
2017-12 93426 0.687377 -4.000753 -3.191796 0.235393 0.0071
2017-12 93428 0.240590 -4.000753 -3.191796 0.235393 0.0071
2017-12 93429 0.052937 -4.000753 -3.191796 0.235393 0.0071
2017-12 93434 0.910938 -4.000753 -3.191796 0.235393 0.0071
2017-12 93436 0.137670 -4.000753 -3.191796 0.235393 0.0071
2018-01 93426 3.362003 -2.997135 -2.029331 1.016955 0.011298
2018-01 93428 1.330341 -2.997135 -2.029331 1.016955 0.011298
2018-01 93429 1.579284 -2.997135 -2.029331 1.016955 0.011298
我的嘗試:
df[['A','B']].mul(df[['C','D','E']])
>>> TypeError: Cannot compare type 'Period' with type 'str'
任何幫助總是不勝感激!
使用itertools.product
:
from itertools import product
l1 = ['A', 'B']
l2 = ['C', 'D', 'E']
for c1, c2 in product(l1, l2):
df[f'{c1}{c2}'] = df[c1].mul(df[c2])
id A B C D E AC \
2017-12 93426 0.687377 -4.000753 -3.191796 0.235393 0.007100 -2.193967
2017-12 93428 0.240590 -4.000753 -3.191796 0.235393 0.007100 -0.767914
2017-12 93429 0.052937 -4.000753 -3.191796 0.235393 0.007100 -0.168964
2017-12 93434 0.910938 -4.000753 -3.191796 0.235393 0.007100 -2.907528
2017-12 93436 0.137670 -4.000753 -3.191796 0.235393 0.007100 -0.439415
2018-01 93426 3.362003 -2.997135 -2.029331 1.016955 0.011298 -6.822617
2018-01 93428 1.330341 -2.997135 -2.029331 1.016955 0.011298 -2.699702
2018-01 93429 1.579284 -2.997135 -2.029331 1.016955 0.011298 -3.204890
AD AE BC BD BE
2017-12 0.161804 0.004880 12.769587 -0.941749 -0.028405
2017-12 0.056633 0.001708 12.769587 -0.941749 -0.028405
2017-12 0.012461 0.000376 12.769587 -0.941749 -0.028405
2017-12 0.214428 0.006468 12.769587 -0.941749 -0.028405
2017-12 0.032407 0.000977 12.769587 -0.941749 -0.028405
2018-01 3.419006 0.037984 6.082179 -3.047951 -0.033862
2018-01 1.352897 0.015030 6.082179 -3.047951 -0.033862
2018-01 1.606061 0.017843 6.082179 -3.047951 -0.033862
詳情:
itertools.product
為我們提供了兩個列表的組合,因此我們遍歷這些組合並創建我們的列:
list(product(l1, l2))
[('A', 'C'), ('A', 'D'), ('A', 'E'), ('B', 'C'), ('B', 'D'), ('B', 'E')]
來自 OC 的有用編輯
我使用的是 python 3.4,不得不使用 .format 函數
df['{c1}{c2}'.format(c1=c1, c2=c2)]
廣播是一個不錯的選擇:
pd.DataFrame(
(df[['A','B']].values[:,:,None]
* df[['C','D','E']].values[:,None,:]
).reshape(len(df),-1),
columns = [f'{x}{y}' for x in 'AB' for y in 'CDE'],
index = df.index
)
輸出:
AC AD AE BC BD BE
2017-12 -2.193967 0.161804 0.004880 12.769587 -0.941749 -0.028405
2017-12 -0.767914 0.056633 0.001708 12.769587 -0.941749 -0.028405
2017-12 -0.168964 0.012461 0.000376 12.769587 -0.941749 -0.028405
2017-12 -2.907528 0.214428 0.006468 12.769587 -0.941749 -0.028405
2017-12 -0.439415 0.032407 0.000977 12.769587 -0.941749 -0.028405
2018-01 -6.822617 3.419006 0.037984 6.082179 -3.047951 -0.033862
2018-01 -2.699702 1.352897 0.015030 6.082179 -3.047951 -0.033862
2018-01 -3.204890 1.606061 0.017843 6.082179 -3.047951 -0.033862
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.