Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:将数据帧的每一行除以另一个数据帧向量_Python_Pandas - Fatal编程技术网

Python:将数据帧的每一行除以另一个数据帧向量

Python:将数据帧的每一行除以另一个数据帧向量,python,pandas,Python,Pandas,我有一个维度为2000行x 500列的数据帧(df1)(不包括索引),我想将每一行除以另一个维度为1行x 500列的数据帧(df2)。两者都有相同的列标题。我试过: df.divide(df2)和 df.divide(df2,axis='index')和其他多种解决方案,我总是在每个单元格中得到一个带有nan值的df。函数df.divide中缺少什么参数?您可以按系列进行除,即df2的第一行: In [11]: df = pd.DataFrame([[1., 2.], [3., 4.]], co

我有一个维度为
2000行x 500列的数据帧(df1)(不包括索引),我想将每一行除以另一个维度为
1行x 500列的数据帧(df2)。两者都有相同的列标题。我试过:

df.divide(df2)
df.divide(df2,axis='index')
和其他多种解决方案,我总是在每个单元格中得到一个带有
nan
值的df。函数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]


或者您可以使用
df1/df2.values[0,:]

小说明以防万一:Andy的第一个示例(
df.div(df2)
)在第一行工作时,NaN无处不在的原因是div试图匹配索引(和列)。在Andy的示例中,在两个数据帧中都可以找到索引0,因此进行了除法,而不是索引1,因此添加了一行NaN。如果运行以下命令(仅“t”行被分割),则此行为将更为明显:

因此,在您的例子中,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)

如果要使用特定值分割列的每一行,可以尝试:

df['column_name'] = df['column_name'].div(10000)
对我来说,这段代码将“column_name”的每一行用10000进行划分。

要划分一行(使用单列或多列),我们需要执行以下操作:

df.loc['index_value'] = df.loc['index_value'].div(10000)

很好。关键信息在答案的第一句话中陈述——数据帧必须除以向量(pd系列)。
df['column_name'] = df['column_name'].div(10000)
df.loc['index_value'] = df.loc['index_value'].div(10000)