python - 使用对每一行列的函数操作在 Pandas 数据框中创建新行的计算效率最高的方法?

标签 python pandas

假设我有一个数据框,其中两列包含整数

A  B 
3  3
4  6
6  4
7  4

我想创建一个从现有列创建新行的函数

def new_rows(row):
    for idx in range (row['A']):
        c = idx*row['B']
        row['C'] = c
        return row

所以生成的数据框将是

A.  B.   C 
3.  3.   0
3.  3.   3
3.  3.   6
4.  6    0
4.  6    6
4.  6    12
4.  6    18
6  4.    0
...
...
...

据我所知,pandas map 和 apply 可用于创建新列,但不能用于创建额外行

我能想到的最佳解决方案是使用 pandas iterrows 在迭代期间应用操作,将所有值保存到字典列表中,然后创建该列表的 pandas 数据框。

最佳答案

您可以使用 Index.repeat 以矢量化方式解决此问题在 df.A 和 groupby.cumcount 上生成范围并与 B 相乘:

def myf(data):
    a = data.loc[data.index.repeat(df['A'])]
    a['C'] = a.groupby("A").cumcount()*data['B']
    return a.reset_index(drop=True)

print(myf(df))


    A  B   C
0   3  3   0
1   3  3   3
2   3  3   6
3   4  6   0
4   4  6   6
5   4  6  12
6   4  6  18
7   6  4   0
8   6  4   4
9   6  4   8
10  6  4  12
11  6  4  16
12  6  4  20
13  7  4   0
14  7  4   4
15  7  4   8
16  7  4  12
17  7  4  16
18  7  4  20
19  7  4  24
​

关于python - 使用对每一行列的函数操作在 Pandas 数据框中创建新行的计算效率最高的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68698953/

相关文章:

python - 使用 python 从重定向的标准输入读取输入

python - 将不同长度的列添加到 Pandas 数据框中

python - re.sub 在标点符号和以标点符号开头或结尾的单词之间放置空格

python - 如何使用 numpy.timedelta 添加(或减去)1 个月?

python - Pandas:以不同的方式对每一列进行分组

python - 通过从以前的索引列计算在 Pandas 数据框中创建新列

python - 如何测试 Pandas 数据框字符串列中的哪个单元格包含给定引用字符串的子字符串?

python - 将数据拟合到分布?

python - 将不同数据框中的 2 列与主键条件进行比较,无需合并

python - 如何根据字符串包含条件用值填充列