我想把兩個資料框架加在一起,因為第1列被加到第1列(如基于i,j的矩陣求和),第2列被加到第2列,如果該列在其中一個資料框架中不存在,它們仍應從其中一個資料框架中附加。
輸出應該是一個資料框架,包括一個顯示的索引。 ['太陽'、'風'、'水'、'流'],然后資料幀的范圍應該是1:22。
目前所有的值都是0,但是如果列 "2",dt1中的單元格3是200,那么這個單元格將被添加到列 "2",dt2中的單元格3是10,總數是210。
import pandas as pd
cols = range(1, 20)
idx = ['Sun'/span>, 'Wind'/span>, 'Water'/span>, 'Flow'/span>]
rows = [0] * int(len(cols)
rows = [rows]
dt1 = pd.DataFrame(rows, index=idx, columns=cols)
dt1 = dt1.reset_index()
cols = range(3, 22)
idx = ['太陽', '風', '水', '流量']
rows = [0] * int(len(cols)
rows = [rows]
dt2 = pd.DataFrame(rows, index=idx, columns=cols)
dt2 = dt2.reset_index()
試過了。
df = dt1[dt1.columns[1:]].add(dt2[dt2.columns[1:]).fillna(0)
可能矩陣加法是使用兩個for回圈的方法,但是,我不太確定如何處理在正確的列中追加正確的值的比較。
uj5u.com熱心網友回復:
我想你可以像這樣重新索引兩個df:s
dt1 = dt1.reindex(range(1,22))dt2 = dt2.reindex(range(1,22))
dt3 = dt1 dt2
uj5u.com熱心網友回復:
如果你的列和行在兩個資料框之間是對齊的:
dt1.iloc[:, 1:].add(dt2.iloc[:, 1: ].values)
或者不要reset_index:
>>> dt1 dt2
uj5u.com熱心網友回復:
以下是我對你問題的理解,我的解決方案。
cols = range(1, 20)
idx = ['Sun'/span>, 'Wind'/span>, 'Water'/span>, 'Flow'/span>]
rows = [0] * int(len(cols)
rows = [rows]
dt1 = pd.DataFrame(rows, index=idx, columns=cols)
cols = range(3, 22)
idx = ['太陽', '風', '水', '流量']
rows = [0] * int(len(cols)
rows = [rows]
dt2 = pd.DataFrame(rows, index=idx, columns=cols)
# 根據匹配的列和索引添加資料框架。
dt3 = dt1 dt2
# 填充每一個與其他列的值不重疊的列。
for col in dt3:
if col in dt1.columns:
dt3[col].fillna(dt1[col],inplace = True)
if col in dt2.columns。
dt3[col].fillna(dt2[col],inplace = True)
# NaN是一個浮點型別,所以要把整個df轉換成整數。
dt3 = dt3.astype(int)
uj5u.com熱心網友回復:
使用差分和相交,你可以將dt2中的未知列添加到dt1中,然后對這些列進行共同求和。這里的假設是,你想要的是逐行相加(也就是說,每個資料集都有共同的行),所以reset_index是不需要的。
import pandas as pd
cols = range(1, 20)
idx = ['Sun'/span>, 'Wind'/span>, 'Water'/span>, 'Flow'/span>]
rows = [0] * int(len(cols)
rows = [rows]
dt1 = pd.DataFrame(rows, index=idx, columns=cols)
cols = range(3, 22)
idx = ['太陽', '風', '水', '流量']
rows = [0] * int(len(cols)
rows = [rows]
dt2 = pd.DataFrame(rows, index=idx, columns=cols)
# 從dt2插入新的列到dt1,然后添加公共列。
common_columns = dt1.columns.intersection(dt2.columns)
new_columns = dt2.columns.difference(dt1.columns)
dt1[new_columns] = dt2[new_columns] 。
dt1[common_columns] = dt2[common_columns] 。
del dt2
uj5u.com熱心網友回復:
你可以通過Index.union()獲得列的聯合,通過.reindex()重新索引,填充值為0。 然后.add()2個資料幀和.reset_index(),如下所示:
dt1a = dt1.set_index('index' )
dt2a = dt2.set_index('index')
all_cols = dt1a.columns.union(dt2a.columns)
dt1b = dt1a.reindex(all_cols, axis=1, fill_value=0)
dt2b = dt2a.reindex(all_cols, axis=1, fill_value=0)
df_out = dt1b.add(dt2b).reset_index()
資料輸入
dt1.at[2, 3] = 200。
print(dt1)
索引 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
0 太陽 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 Wind 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 水 0 0 200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 Flow 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
dt2.at[2, 3] =10
print(dt2)
索引 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0 太陽 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 Wind 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 水 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 Flow 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
輸出
print(df_out)。
索引 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0 太陽 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 數字">0 0 0 0 0 0
1 Wind 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 數字">0 0 0 0 0 0
2 水 0 0 210 00 0 0 0 0 0 0 0 0 0 0 0 數字">0 0 0 0 0 0
3 Flow 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 number">0 0 0 0 0 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/323989.html
標籤:
