我有一個df:
dict1 = {'A': 1, 'B': 2, 'C': 3, 'D': 4}
dict2 = {'A': 10, 'B': 20, 'C': 30, 'D': 40}
dict3 = {'A': 100, 'B': 200, 'C': 300, 'D': 400}
df = pd.DataFrame([dict1, dict2, dict3])
(我在家作業,這里無法復制粘貼輸出,抱歉)
現在,我想“放大” df,然后將計算值分配給新列。
df[['new_col1', 'new_col2']] = None
for idx, row in df.iterrows():
# insert the calculated values for `new_col1` and `new_col2` here
我認為我確實需要遍歷行,因為計算是基于行的值。我當然可以使用 手動逐個插入每個單元格的值.at,但是我有數十萬行,并且~20要填寫計算值。我該怎么做?
我試過了:
dictt = {'new_col1': 1, 'new_col2': 2}
df.iloc[0] = df.iloc[0].map(dictt)
但是,如果我檢查是什么df.iloc[0],它是一排NaN. 我也試過:
df.iloc[0] = df.iloc[0].replace(dictt)
但這并沒有做任何事情。另外,如果有更好/更合適的方法來進行這樣的操作,我會全神貫注。
uj5u.com熱心網友回復:
如果你有一些繁重的復雜函式主要瓶頸在這個函式中,而不是在熊貓中,這里是如何迭代的解決方案DataFrame.apply:
def f(a, b):
return pd.Series({'new_col1': 1 a, 'new_col2': 2 b})
df = df.join(df.apply(lambda x: f(x.A, x.B), axis=1))
print (df)
A B C D new_col1 new_col2
0 1 2 3 4 2 4
1 10 20 30 40 11 22
2 100 200 300 400 101 202
另一個想法:
def f(a, b):
return (1 a, 2 b)
df[['col1','col2']] = df.apply(lambda x: f(x.A, x.B), axis=1, result_type='expand')
print (df)
A B C D col1 col2
0 1 2 3 4 2 4
1 10 20 30 40 11 22
2 100 200 300 400 101 202
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/484952.html
上一篇:重現沒有資料的圖形
