Saya ingin membuat kolom baru dalam pandas
bingkai data dengan menerapkan fungsi ke dua kolom yang ada. Mengikuti jawaban ini, saya dapat membuat kolom baru ketika saya hanya membutuhkan satu kolom sebagai argumen:
import pandas as pd
df = pd.DataFrame({"A": [10,20,30], "B": [20, 30, 10]})
def fx(x):
return x * x
print(df)
df['newcolumn'] = df.A.apply(fx)
print(df)
Namun, saya tidak tahu bagaimana melakukan hal yang sama ketika fungsi tersebut membutuhkan beberapa argumen. Misalnya, bagaimana cara membuat kolom baru dengan meneruskan kolom A dan kolom B ke fungsi di bawah ini?
def fxy(x, y):
return x * y
np.vectorize()
sangat cepat. Terima kasih.np.vectorize
tidak berfungsi. Alasannya adalah, bahwa salah satu kolom adalah tipepandas._libs.tslibs.timestamps.Timestamp
, yang diubah menjadi tipenumpy.datetime64
oleh vektorisasi. Kedua jenis ini tidak dapat dipertukarkan, menyebabkan fungsi berperilaku buruk. Ada saran tentang ini? (Selain.apply
karena ini tampaknya harus dihindari)Anda dapat menggunakan contoh @greenAfrican, jika mungkin bagi Anda untuk menulis ulang fungsi Anda. Tetapi jika Anda tidak ingin menulis ulang fungsi Anda, Anda dapat membungkusnya menjadi fungsi anonim di dalam berlaku, seperti ini:
sumber
Ini memecahkan masalah:
Anda juga bisa:
sumber
Jika Anda perlu membuat beberapa kolom sekaligus :
Buat kerangka data:
Buat fungsinya:
Tetapkan kolom baru:
sumber
Satu lagi sintaks gaya bersih dict:
atau,
sumber