gpt4 book ai didi

python - 使用 pandas 基于过滤和用户输入添加三列

转载 作者:行者123 更新时间:2023-12-01 02:10:10 25 4
gpt4 key购买 nike

我有一个数据框。它是一个中间 csv 文件。它有以下数据。

 sv1   val1    sv2    val2    sv3   val3
2 0.2 4 0.6 8 0.3
2 0.1 6 0.1 8 0.11
2 0.12 6 -0.3 8 0.2
5 0 4 1.6 8 0.7
2 0.34 6 2.3 8 0.12
... .... ... .... ... .....

目标:如果 sv1,sv2,sv3 不包含 5,则 val1+val2+val3 相加。如果任何 svs 列(例如 sv1)包含 5,则加法将为 val2+val3

# Attempt
import pandas as pd
names=['sv1','sv2','sv3','val1','val2','val3']
df=pd.read_csv('Myfile.csv',names=names)
discard_id=int(raw_input('enter the number to discard')

add_result=df.loc[['sv1','sv2','sv3']!=discard_id]
.....
perform addition

最佳答案

首先通过discard_id比较所有值并得到any每行至少有一个 True。然后按子集对列进行求和,并按 numpy.where 添加到新列:

discard_id = 5

m = (df[['sv1','sv2','sv3']] == discard_id).any(axis=1)
sum1 = df[['val1','val2','val3']].sum(axis=1)
sum2 = df[['val2','val3']].sum(axis=1)

df['new'] = np.where(m, sum2, sum1)

print (df)
sv1 val1 sv2 val2 sv3 val3 new
0 2 0.20 4 0.6 8 0.30 1.10
1 2 0.10 6 0.1 8 0.11 0.31
2 2 0.12 6 -0.3 8 0.20 0.02
3 5 0.00 4 1.6 8 0.70 2.30
4 2 0.34 6 2.3 8 0.12 2.76

详细信息:

print (m)
0 False
1 False
2 False
3 True
4 False
dtype: bool

print (sum1)
0 1.10
1 0.31
2 0.02
3 2.30
4 2.76
dtype: float64

print (sum2)
0 0.90
1 0.21
2 -0.10
3 2.30
4 2.42
dtype: float64

时间:

df = pd.concat([df] * 1000, ignore_index=True)

In [312]: %%timeit
...: m = (df[['sv1','sv2','sv3']] == discard_id).any(axis=1)
...: sum1 = df[['val1','val2','val3']].sum(axis=1)
...: sum2 = df[['val2','val3']].sum(axis=1)
...: df['new'] = np.where(m, sum2, sum1)
...:
100 loops, best of 3: 2.77 ms per loop

#jp_data_analysis's solution
In [313]: %%timeit
...: df['sum'] = df.apply(summer, axis=1, num=5)
...:
1 loop, best of 3: 287 ms per loop

关于python - 使用 pandas 基于过滤和用户输入添加三列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48748153/

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