2024-06-16 08:28:42 发布
网友
我有一个维度为2000 rows x 500 columns(不包括索引)的数据帧(df1),我想将每一行除以另一个维度为1 rows X 500 columns的数据帧(df2)。两者都有相同的列标题。我试过:
2000 rows x 500 columns
1 rows X 500 columns
df.divide(df2)和 df.divide(df2, axis='index')和其他多种溶液,我总是得到每个细胞中具有nan值的df。函数df.divide中缺少什么参数?
df.divide(df2)
df.divide(df2, axis='index')
nan
df.divide
您可以除以序列即df2的第一行:
In [11]: df = pd.DataFrame([[1., 2.], [3., 4.]], columns=['A', 'B']) In [12]: df2 = pd.DataFrame([[5., 10.]], columns=['A', 'B']) In [13]: df.div(df2) Out[13]: A B 0 0.2 0.2 1 NaN NaN In [14]: df.div(df2.iloc[0]) Out[14]: A B 0 0.2 0.2 1 0.6 0.4
在df.divide(df2, axis='index')中,需要提供df2的轴/行(例如df2.iloc[0])。
df2.iloc[0]
import pandas as pd data1 = {"a":[1.,3.,5.,2.], "b":[4.,8.,3.,7.], "c":[5.,45.,67.,34]} data2 = {"a":[4.], "b":[2.], "c":[11.]} df1 = pd.DataFrame(data1) df2 = pd.DataFrame(data2) df1.div(df2.iloc[0], axis='columns')
或者您可以使用df1/df2.values[0,:]
df1/df2.values[0,:]
小小的澄清以防万一:当Andy的第一个示例(df.div(df2))在第一行工作时,为什么到处都是NaN,原因是div尝试匹配索引(和列)。在Andy的示例中,索引0在两个数据帧中都存在,因此进行了划分,而不是索引1,因此添加了一行NaN。如果运行以下命令(仅划分“t”行),则此行为将更明显:
df.div(df2)
df_a = pd.DataFrame(np.random.rand(3,5), index= ['x', 'y', 't']) df_b = pd.DataFrame(np.random.rand(2,5), index= ['z','t']) df_a.div(df_b)
所以在您的例子中,df2的唯一一行的索引显然不在df1中。”幸运的是,这两个数据帧中的列标题都是相同的,所以当您对第一行进行切片时,您将得到一个序列,其索引由df2的列标题组成。这是最终使分裂得以正常进行的原因。
对于索引和列匹配的情况:
df_a = pd.DataFrame(np.random.rand(3,5), index= ['x', 'y', 't'], columns = range(5)) df_b = pd.DataFrame(np.random.rand(2,5), index= ['z','t'], columns = [1,2,3,4,5]) df_a.div(df_b)
您可以除以序列即df2的第一行:
在
df.divide(df2, axis='index')
中,需要提供df2的轴/行(例如df2.iloc[0]
)。或者您可以使用
df1/df2.values[0,:]
小小的澄清以防万一:当Andy的第一个示例(
df.div(df2)
)在第一行工作时,为什么到处都是NaN,原因是div尝试匹配索引(和列)。在Andy的示例中,索引0在两个数据帧中都存在,因此进行了划分,而不是索引1,因此添加了一行NaN。如果运行以下命令(仅划分“t”行),则此行为将更明显:所以在您的例子中,df2的唯一一行的索引显然不在df1中。”幸运的是,这两个数据帧中的列标题都是相同的,所以当您对第一行进行切片时,您将得到一个序列,其索引由df2的列标题组成。这是最终使分裂得以正常进行的原因。
对于索引和列匹配的情况:
相关问题 更多 >
编程相关推荐