gpt4 book ai didi

python - Pandas :添加从行和伙伴行计算的新列

转载 作者:太空宇宙 更新时间:2023-11-04 04:50:43 24 4
gpt4 key购买 nike

我有成对的数据,行成对出现,它们的 id 名为 ab:

>>> df = pd.DataFrame([['1a', 'A', 5], ['1b', 'B', 10], ['2a', 'C', 20],['2b', 'D', 4]], columns=['id', 'name', 'count'])
>>> df
id name count
0 1a A 5
1 1b B 10
2 2a C 20
3 2b D 4

1a1b 是一对,2a2b 是另一对。我想创建一个新列 rel_count,其中的值是该行自己的 count 除以其伙伴的 count:

   id name  count  rel_count
0 1a A 5 0.5
1 1b B 10 2.0
2 2a C 20 5.0
3 2b D 4 0.2

在 pandas 中执行此操作的最佳方法是什么?

最佳答案

您可以通过 ravel reshape 二维数组、翻转和平整:

df = pd.DataFrame([['1a', 'A', 5], ['1b', 'B', 10], 
['2a', 'C', 20],['2b', 'D', 4],
['3a', 'C', 10],['3b', 'D', 5]],
columns=['id', 'name', 'count'])
print (df)
id name count
0 1a A 5
1 1b B 10
2 2a C 20
3 2b D 4
4 3a C 10
5 3b D 5

#if not sorting by pairs
#df = df.sort_values('id')

a = df['count'].values.reshape(-1, 2)[:, ::-1].ravel()
print (a)
[10 5 4 20 5 10]

如果可能以某种方式区分组 - 第一个字母如 @Zero 注释或提取第一个 int 值:

g = df['id'].str.extract('(\d+)', expand=False)
a = df.groupby(g)['count'].transform(lambda x: x[::-1])
print (a)
0 10
1 5
2 4
3 20
4 5
5 10
Name: count, dtype: int64

print (g)
0 1
1 1
2 2
3 2
4 3
5 3
Name: id, dtype: object


df['rel_count'] = df['count'] / a
print (df)
id name count rel_count
0 1a A 5 0.5
1 1b B 10 2.0
2 2a C 20 5.0
3 2b D 4 0.2
4 3a C 10 2.0
5 3b D 5 0.5

关于python - Pandas :添加从行和伙伴行计算的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48404120/

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