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

标签 python pandas

我有成对的数据,行成对出现,它们的 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/

相关文章:

python - django中的身份验证功能使用散列密码而不是原始密码

python - 如何从 setup_requires 依赖项覆盖 setuptools 命令?

Python 2.6 numpy 交互数组对象错误

python - 修改pandas数据框中的csv数据

python - 数据框差异

python - 将列名称应用于 pandas DataFrame,名称不再是 unicode

python - 分块读取大文件,分块压缩和写入

python - 在 Django 上创建博客 - URL 无法合作

python - 类型错误 : bad operand type for unary ~: float

python - 带有多个分隔符的 Pandas to_csv