假設:我有這樣的資料框:
import pandas as pd
df = pd.DataFrame({'a':['a1','a2','a3','a4','a5'],'b':[1,2,3,4,5]})
輸出:
a b
0 a1 1
1 a2 2
2 a3 3
3 a4 4
4 a5 5
現在我想添加對應于a1, a2, a3, 的新列a4,a5
for index, row in df.iterrows():
df[index] = np.NaN
輸出:
a b 0 1 2 3 4
0 a1 1 NaN NaN NaN NaN NaN
1 a2 2 NaN NaN NaN NaN NaN
2 a3 3 NaN NaN NaN NaN NaN
3 a4 4 NaN NaN NaN NaN NaN
4 a5 5 NaN NaN NaN NaN NaN
如何在資料框中生成三角矩陣?
我想要以下輸出:
a b 0 1 2 3 4
0 a1 1 a1 a2 a3 a4 a5
1 a2 2 NaN a2 a3 a4 a5
2 a3 3 NaN NaN a3 a4 a5
3 a4 4 NaN NaN NaN a4 a5
4 a5 5 NaN NaN NaN NaN a5
我應該構建一個額外的資料框作為三角矩陣然后合并嗎?最簡單的方法是什么?
uj5u.com熱心網友回復:
這將起作用:
for i in range(df.shape[0]):
df.iloc[i, i 2:] = df['a'][i:]
輸出:
>>> df
a b 0 1 2 3 4
0 a1 1 NaN NaN NaN NaN NaN
1 a2 2 NaN NaN NaN NaN NaN
2 a3 3 NaN NaN NaN NaN NaN
3 a4 4 NaN NaN NaN NaN NaN
4 a5 5 NaN NaN NaN NaN NaN
>>> for i in range(df.shape[0]):
... df.iloc[i, i 2:] = df['a'][i:]
>>> df
a b 0 1 2 3 4
0 a1 1 a1 a2 a3 a4 a5
1 a2 2 NaN a2 a3 a4 a5
2 a3 3 NaN NaN a3 a4 a5
3 a4 4 NaN NaN NaN a4 a5
4 a5 5 NaN NaN NaN NaN a5
uj5u.com熱心網友回復:
一種有效的方法是使用 numpy (numpy.tile和numpy.triu):
import numpy as np
np.triu(np.tile(df['a'].values, (len(df), 1)))
然后制作一個資料框并加入:
df.join(pd.DataFrame(np.triu(np.tile(df['a'].values, (len(df), 1))),
index=df.index
).replace({0: pd.NA}))
輸出:
a b 0 1 2 3 4
0 a1 1 a1 a2 a3 a4 a5
1 a2 2 <NA> a2 a3 a4 a5
2 a3 3 <NA> <NA> a3 a4 a5
3 a4 4 <NA> <NA> <NA> a4 a5
4 a5 5 <NA> <NA> <NA> <NA> a5
選擇
n = len(df)
df.join(pd.DataFrame(np.tile(df['a'].values, (n, 1)), index=df.index
).where(np.triu(np.ones((n, n))).astype(bool)))
輸出:
a b 0 1 2 3 4
0 a1 1 a1 a2 a3 a4 a5
1 a2 2 NaN a2 a3 a4 a5
2 a3 3 NaN NaN a3 a4 a5
3 a4 4 NaN NaN NaN a4 a5
4 a5 5 NaN NaN NaN NaN a5
uj5u.com熱心網友回復:
我的解決方案類似于 mozway 但不是 3 個步驟:)
import pandas as pd
import numpy as np
d = { "a":['a1','a2','a3','a4','a5'] }
"create dataframe from dict"
df = pd.DataFrame(d)
indek1 = list(df.index)
column1 = df['a'].values
lista_tot = []
for k in indek1:
lista_tot.append(column1)
a = np.triu(lista_tot, 0)
df1 = pd.DataFrame(a)
print(df1)
df = df.join(df1)
print(df)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/358222.html
上一篇:用Pandas列映射字典
