Python 如何使用列子集上的广播系列修改数据帧
鉴于下表:Python 如何使用列子集上的广播系列修改数据帧,python,pandas,dataframe,broadcasting,Python,Pandas,Dataframe,Broadcasting,鉴于下表: import numpy as np import pandas as pd data = pd.DataFrame(data = np.arange(16).reshape((4, 4)), index = ['Chile', 'Argentina', 'Peru', 'Bolivia'], columns = ['one', 'two', 'three', 'four'])
import numpy as np
import pandas as pd
data = pd.DataFrame(data = np.arange(16).reshape((4, 4)),
index = ['Chile', 'Argentina', 'Peru', 'Bolivia'],
columns = ['one', 'two', 'three', 'four'])
one two three four
Chile 0 1 2 3
Argentina 4 5 6 7
Peru 8 9 10 11
Bolivia 12 13 14 15
我希望通过在列的子集(1
和3
)上广播熊猫系列来应用操作,这些列将修改(更新)表。所以
ser_to_broad = pd.Series([1, 2], index = ['one', 'three'])
data + ser_to_broad
one two three four
Chile 1 NaN 4 NaN
Argentina 5 NaN 8 NaN
Peru 9 NaN 12 NaN
Bolivia 13 NaN 16 NaN
有没有一种方法可以通过广播方式保留列
two
和four
的原始值?使用reindex
,因为seru to_broad
中有漏列,那么它将返回NaN
(NaN
+somevalue=NaN
)
使用
reindex
,由于seru to_broad
中存在未命中列,因此它将返回NaN
(NaN
+somevalue=NaN
)
如果您想更新数据,我认为这样做可以:
ser_to_broad = pd.Series([1, 2], index=['one', 'three'])
data[ser_to_broad.index] += ser_to_broad
print(data)
输出
one two three four
Chile 1 1 4 3
Argentina 5 5 8 7
Peru 9 9 12 11
Bolivia 13 13 16 15
如果您想更新数据,我认为这样做可以:
ser_to_broad = pd.Series([1, 2], index=['one', 'three'])
data[ser_to_broad.index] += ser_to_broad
print(data)
输出
one two three four
Chile 1 1 4 3
Argentina 5 5 8 7
Peru 9 9 12 11
Bolivia 13 13 16 15
它看起来像是你应该能够用它来做这件事。添加但它没有实现:好方法。的确如此,@AndyHayden我认为。add已经处理了这些问题situation@AndyHayden然而,我想到的第一件事是添加,似乎不支持这种情况。@Wen Ben您的方法的一个问题是需要在序列中填充一个值,该值可以中和列
two
和four
中的操作。例如,如果操作不是data+ser
而是data*ser
,我们需要用一个来填充序列。@CristóbalAlcázar是的,不同的操作可能需要不同的填充。它看起来好像你应该能够用它来完成。添加但它没有实现:好方法。的确如此,@AndyHayden我认为。add已经处理了这些问题situation@AndyHayden然而,我想到的第一件事是添加,似乎不支持这种情况。@Wen Ben您的方法的一个问题是需要在序列中填充一个值,该值可以中和列two
和four
中的操作。例如,如果操作而不是data+ser
是data*ser
,我们需要用一个来填充序列。@CristóbalAlcázar是的,这是正确的,不同的操作可能需要不同的填充,因此要更新数据
?是,想法是用操作来改变表格,是否要更新数据
?是的,想法是用操作来改变表格。这个答案更具普遍性,因为它不需要在用值填充序列的其他列中抵消操作。我唯一的问题是,考虑到切片操作,广播操作更难读取。这个答案更具普遍性,因为它不需要在用值填充序列的其他列中抵消操作。我唯一的问题是,鉴于切片操作,广播操作更难读取。