我想使用第二個數據框添加和更新熊貓數據框中的多個列。我得到的問題是當我想要添加的列數與基數據框中的列數不匹配時,我得到以下錯誤:「傳遞值的形狀是(2,3),索引意味着(2,2 )」熊貓更新多個字段
問題的簡化版本低於
tst = DataFrame({"One":[1,2],"Two":[2,4]})
def square(row):
"""
for each row in the table return multiple calculated values
"""
a = row["One"]
b = row["Two"]
return a ** 2, b ** 2, b ** 3
#create three new fields from the data
tst[["One^2", "Two^2", "Two^3"]] = tst.apply(square, axis=1)
如果要添加字段的數量相匹配的數量已經在opertaion按預期工作表。
tst = DataFrame({"One":[1,2],"Two":[2,4]})
def square(row):
"""
for each row in the table return multiple calculated values
"""
a = row["One"]
b = row["Two"]
return a ** 2, b ** 2
#create three new fields from the data
tst[["One^2", "Two^2"]] = tst.apply(square, axis=1)
我知道我可以做到每場seperately但在實際的問題,我試圖解決我進行「更新」(即平方)內被更新的表和外部表之間的連接,並希望能夠一次獲取所有必需的信息。
以下是我將如何在SQL中完成它。不幸的是,這兩個數據幀包含來自不同數據庫技術的數據,因此我必須在熊貓中執行操作。
update tu
set tu.a_field = upd.the_field_i_want
tu.another_field = upd.the_second_required_field
from to_update tu
inner join the_updater upd
on tu.item_id = upd.item_id
and tu.date between upd.date_from and upd.date_to
在這裏,你可以看到我想要做的事情的確切細節。我有一個表「to_update」,其中包含針對item_id的時間點信息。另一個表「the_updater」包含對item_id的日期範圍信息。例如,一個特定的item_id可能與customer_1一起從DateA到DateB,而customer_2在DateB和DateC等之間。我希望能夠將包含日期範圍的表中的信息與時間點表對齊。
請注意,由於數據問題(這實際上是作爲數據質量測試的一部分編寫的)合併將不起作用。我真的需要能夠複製上述更新語句的功能。
我明顯可以做它作爲一個循環,但我希望在可能的情況下使用熊貓框架。
那麼你想在這裏做什麼?爲平方值這是微不足道的執行,並不需要在這種情況下使用'應用' – EdChum
我想創建任意多個字段並使用apply方法同時分配它們的值。示例中的簡單函數只是表示我可能想要用於生成新字段的任意函數。問題是當試圖在上面的例子中創建多於1個字段的錯誤。一旦我可以做到這一點,我可以用任何值代替平凡的功能。 –