gpt4 book ai didi

python - 为 Pandas 数据框中B列中的绝对数字分配A列中的相同值

转载 作者:行者123 更新时间:2023-12-04 14:49:19 25 4
gpt4 key购买 nike

我有一个看起来像这样的 Pandas 数据框:

import pandas as pd
import numpy as np
d = {'value1': [1, 2, 3, -4, 5, -1, -7, -2, 4, -5], 'value2': [100, 200, 200, 300, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]}
df = pd.DataFrame(data=d)

value1 value2
1 100.0
2 200.0
3 200.0
-4 300.0
5 NaN
-1 NaN
-7 NaN
-2 NaN
4 NaN
-5 NaN

如何为 value1 列中的所有绝对数字分配 value2 列中的相同值?像这样:

value1  value2
1 100.0
2 200.0
3 200.0
-4 300.0
5 NaN
-1 100.0
-7 NaN
-2 200.0
4 300.0
-5 NaN

最佳答案

使用Series.map通过将 value1 转换为绝对值,转换为索引,删除缺失值并映射原始值的绝对值,通过新的 Series:

s = df.assign(value1 = df['value1'].abs()).set_index('value1')['value2'].dropna()
df['value2'] = df['value1'].abs().map(s)
#if possible duplicates in `s.index` convert to dict (last dupe is in dict)
#df['value2'] = df['value1'].abs().map(s.to_dict())
print (df)
value1 value2
0 1 100.0
1 2 200.0
2 3 200.0
3 -4 300.0
4 5 NaN
5 -1 100.0
6 -7 NaN
7 -2 200.0
8 4 300.0
9 -5 NaN

编辑:错误意味着 value1 中有重复项,因此首先删除缺失值,转换为绝对值并删除重复项,保留第一行(默认)或最后一行以获取重复项。

d = {'value1': [1, 2, 3, -4, 5, -1, -7, -2, 4, -5, -1],
'value2': [100, 200, 200, 300, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan,500]}
df = pd.DataFrame(data=d)

s1 = df.dropna(subset=['value2']).assign(value1 = lambda x: x['value1'].abs()).drop_duplicates('value1').set_index('value1')['value2']
s2 = df.dropna(subset=['value2']).assign(value1 = lambda x: x['value1'].abs()).drop_duplicates('value1', keep='last').set_index('value1')['value2']

df['value21'] = df['value1'].abs().map(s1)
df['value22'] = df['value1'].abs().map(s2)
print (df)
value1 value2 value21 value22
0 1 100.0 100.0 500.0
1 2 200.0 200.0 200.0
2 3 200.0 200.0 200.0
3 -4 300.0 300.0 300.0
4 5 NaN NaN NaN
5 -1 NaN 100.0 500.0
6 -7 NaN NaN NaN
7 -2 NaN 200.0 200.0
8 4 NaN 300.0 300.0
9 -5 NaN NaN NaN
10 -1 500.0 100.0 500.0

关于python - 为 Pandas 数据框中B列中的绝对数字分配A列中的相同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69315539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com