我想將結果添加apply()為新列。在當前代碼中,我必須在兩個地方給出名稱。有沒有更好的方法來做到這一點?
#!/usr/bin/env python3
import pandas as pd
df = pd.DataFrame(range(3))
def foo(row):
return pd.Series([1, 2], index=['A', 'B']) # first nameing
# second naming
df.loc[:, ['A', 'B']] = df.apply(foo, axis=1)
print(df)
# 0 A B
# 0 0 1 2
# 1 1 1 2
# 2 2 1 2
loc[]對我來說,通過呼叫指定新列的名稱是有意義的。
當我不在結果中指定名稱index=['A', 'B']時,Series()結果將如下所示:
0 A B
0 0 NaN NaN
1 1 NaN NaN
2 2 NaN NaN
從技術上講,我理解為什么會發生這種情況。但是從易于閱讀和可維護的代碼的角度來看,我想避免index=['A', 'B']并找到更好的方法。
uj5u.com熱心網友回復:
當您明確想要洗掉索引對齊時,您可以使用底層的 numpy 陣列:
df = pd.DataFrame(range(3))
def foo(row):
return pd.Series([1, 2]) # no naming
df.loc[:, ['A', 'B']] = df.apply(foo, axis=1).to_numpy()
uj5u.com熱心網友回復:
只是為了好玩,如果你想在函式中保留命名,你可以試試這個:
df.join(df.apply(foo,axis=1))
結果將是
0 A B
0 0 1 2
1 1 1 2
2 2 1 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/424787.html
