pandas 沿着轴1将 Dataframe 列乘/除列表/系列

6ie5vjzr  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(188)

我有一个有N列的 Dataframe ,其中N可以是0。我有一个标量值列表,长度与 Dataframe 中的列列表相同。我想将 Dataframe 中的列乘以或除以列表中的相应值。
例如:

Dataframe

    1  2  3
1   1  2  3
2   4  5  6
3   7  8  9

Multipliers

0 1 2

Expected

   1  2  3
1  0  2  6
2  0  5 12
3  0  8 18

让我们创建数据

# Empty
df_1 = pd.DataFrame({}, index=idx)
list_1 = []
series_1 = pd.Series(list_1, dtype=float)

# Not empty (1 element to shorten example)
df_2 = pd.DataFrame({1: [1]}, index=idx)
list_2 = [12]
series_2 = pd.Series(list_2, dtype=float)

当我将乘数作为列表传递时,它可以正常工作

df_2.mul(list_2)
    1
1  12

但是,如果列表为空,则会收到警告

df_1.mul(list_1, axis=1)
<stdin>:1: FutureWarning: The default dtype for empty Series will be 'object' instead of 'float64' in a future version. Specify a dtype explicitly to silence this warning.
Empty DataFrame
Columns: []
Index: [1]

所以我试着把这个列表作为一个序列来传递。当序列为空时,我没有得到任何警告

df_1.mul(series_1, axis=1)
Empty DataFrame
Columns: []
Index: [1]

但这显然不是正确的做法,因为在传递序列时,序列索引与列名匹配。

df_2.mul(series_2)
    0   1
1 NaN NaN

我想依靠列的顺序,就像用列表一样。
我该如何做到这一点呢?我对这个清单没意见。我只是想经得起未来考验,所以我想去掉这个警告。

qyyhg6bp

qyyhg6bp1#

这里有一个(hacky)的方法来做到这一点:

import pandas as pd

def helper(df, other, *args, **kwargs):
    if isinstance(other, list) and not other:
        return pd.DataFrame()
    return mul(df, other, **kwargs)

mul = pd.DataFrame.mul
pd.DataFrame.mul = helper

df_1 = pd.DataFrame({})
list_1 = []

df_2 = pd.DataFrame({1: [1]})
list_2 = [12]

然后道:
第一次

相关问题