Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.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 如何使用另一列作为参数修改DataFrame列值_Python_Python 3.x_Pandas_Pandas Groupby - Fatal编程技术网

Python 如何使用另一列作为参数修改DataFrame列值

Python 如何使用另一列作为参数修改DataFrame列值,python,python-3.x,pandas,pandas-groupby,Python,Python 3.x,Pandas,Pandas Groupby,我有这样一个数据帧(数据): mac len corp detail 18025 14:1F:BA 8 IeeeRegi IEEE Registration Authority 18026 14:1F:BA:00:00:00 10 Shenzhen Shenzhen Mining Technology Co.,Ltd. 1802

我有这样一个数据帧(数据):

                     mac  len      corp                               detail
18025           14:1F:BA    8  IeeeRegi          IEEE Registration Authority
18026  14:1F:BA:00:00:00   10  Shenzhen  Shenzhen Mining Technology Co.,Ltd.
18027  14:1F:BA:10:00:00   10   Gloquad                                  NaN
18028  14:1F:BA:20:00:00   10  Deutsche      Deutsche Energieversorgung GmbH
18029  14:1F:BA:30:00:00   10   Private                                  NaN
如何使用data['mac'].str.slice(0,data['len'])等方法获得以下结果

我知道应用方法是可以的:

def sub_mac(x):
    return x.mac[:x.len]
data.mac = data.apply(sub_mac, axis=1)

但我想知道是否有其他方法来处理它? 例如,sql之类的方法:

select SUBSTRING(mac, 0, len) as mac_sub from data;
thx.

试试这个:

资料来源:

In [8]: df
Out[8]:
                     mac  len      corp                               detail
18025           14:1F:BA    8  IeeeRegi          IEEE Registration Authority
18026  14:1F:BA:00:00:00   10  Shenzhen  Shenzhen Mining Technology Co.,Ltd.
18027  14:1F:BA:10:00:00   10   Gloquad                                  NaN
18028  14:1F:BA:20:00:00   10  Deutsche      Deutsche Energieversorgung GmbH
18029  14:1F:BA:30:00:00   10   Private                                  NaN
解决方案:

In [9]: df['mac'] = df.groupby('len')['mac'].transform(lambda x: x.str[:x.name])
结果:

In [10]: df
Out[10]:
              mac  len      corp                               detail
18025    14:1F:BA    8  IeeeRegi          IEEE Registration Authority
18026  14:1F:BA:0   10  Shenzhen  Shenzhen Mining Technology Co.,Ltd.
18027  14:1F:BA:1   10   Gloquad                                  NaN
18028  14:1F:BA:2   10  Deutsche      Deutsche Energieversorgung GmbH
18029  14:1F:BA:3   10   Private                                  NaN
试试这个:

资料来源:

In [8]: df
Out[8]:
                     mac  len      corp                               detail
18025           14:1F:BA    8  IeeeRegi          IEEE Registration Authority
18026  14:1F:BA:00:00:00   10  Shenzhen  Shenzhen Mining Technology Co.,Ltd.
18027  14:1F:BA:10:00:00   10   Gloquad                                  NaN
18028  14:1F:BA:20:00:00   10  Deutsche      Deutsche Energieversorgung GmbH
18029  14:1F:BA:30:00:00   10   Private                                  NaN
解决方案:

In [9]: df['mac'] = df.groupby('len')['mac'].transform(lambda x: x.str[:x.name])
结果:

In [10]: df
Out[10]:
              mac  len      corp                               detail
18025    14:1F:BA    8  IeeeRegi          IEEE Registration Authority
18026  14:1F:BA:0   10  Shenzhen  Shenzhen Mining Technology Co.,Ltd.
18027  14:1F:BA:1   10   Gloquad                                  NaN
18028  14:1F:BA:2   10  Deutsche      Deutsche Energieversorgung GmbH
18029  14:1F:BA:3   10   Private                                  NaN