我需要做一个数学运算,它以第二列中的值为条件。这里是设置。
给定一个简单的数据帧(df
):
df = pd.DataFrame({
'col1' : ['A', 'A', 'B', np.nan, 'D', 'C'],
'col2' : [2, 1, 9, 8, 7, 4],
'col3': [0, 1, 9, 4, 2, 3],
})
In [11]: df
Out[11]:
col1 col2 col3
0 A 2 0
1 A 1 1
2 B 9 9
3 NaN 8 4
4 D 7 2
5 C 4 3
我可以添加一个新的列(数学
),然后用一个基于10和col3
之和的数学表达式来填充它。
df['math'] = 10 + df['col3']
In [14]: df
Out[14]:
col1 col2 col3 math
0 A 2 0 10
1 A 1 1 11
2 B 9 9 19
3 NaN 8 4 14
4 D 7 2 12
5 C 4 3 13
但我不知道如何使表达式以另一列中的值为条件(例如,仅当col1==B
)。所需的输出将是:
In [14]: df
Out[14]:
col1 col2 col3 math
0 A 2 0 NaN
1 A 1 1 NaN
2 B 9 9 19
3 NaN 8 4 NaN
4 D 7 2 NaN
5 C 4 3 NaN
为了进一步澄清,我将在For循环
中为col1
值使用一个变量。因此,我无法获取。分组依据()
按此处或此处所述工作。我想我在找这样的东西。。。
df['math'] = 10 + df.loc[[df['col1'] == my_var], 'col3']
这是我从上面第二个例子的评论中得到的,但我无法让它起作用。对于太多的值,它抛出一个ValueError
——也就是说,我试图同时传递筛选器和操作列,但它只需要筛选器。这篇文章也使用了。loc
类似于我上面的表达式-但带有静态的col1
。
使用:(不是一个安全的方法来实现它,见下面的评论)
df['New']=df.col3[df.col1=='B']+10
df
Out[11]:
col1 col2 col3 New
0 A 2 0 NaN
1 A 1 1 NaN
2 B 9 9 19.0
3 NaN 8 4 NaN
4 D 7 2 NaN
5 C 4 3 NaN
使现代化
pd.concat([df,(df.col3[df.col1=='B']+10).to_frame('New')],1)
Out[51]:
col1 col2 col3 New
0 A 2 0 NaN
1 A 1 1 NaN
2 B 9 9 19.0
3 NaN 8 4 NaN
4 D 7 2 NaN
5 C 4 3 NaN
使用loc
df['math'] = df.loc[df.col1.eq('B'), 'col3'].add(10)
col1 col2 col3 math
0 A 2 0 NaN
1 A 1 1 NaN
2 B 9 9 19.0
3 NaN 8 4 NaN
4 D 7 2 NaN
5 C 4 3 NaN
我执行数学,然后用熊猫掩盖它。Series.where通过传递布尔序列df.col1.eq('B')
df.assign(math=df.col3.add(10).where(df.col1.eq('B')))
col1 col2 col3 math
0 A 2 0 NaN
1 A 1 1 NaN
2 B 9 9 19.0
3 NaN 8 4 NaN
4 D 7 2 NaN
5 C 4 3 NaN
问题内容: 我已经看到了将一个列/系列分解为Pandas数据框的多个列的主题的几种变体,但是我一直在尝试做点事情,而实际上并没有成功地使用现有方法。 给定这样的一个DataFrame: 我想将系列中的项目转换为以值作为值的列,如下所示: 我觉得这应该是相对简单的事情,但是由于卷积水平的提高,我已经为此花了几个小时不停地努力,但没有成功。 问题答案: 有几种方法: 使用: 使用: 使用后跟:
我必须解决这个问题:目标:删除大多数行缺少输入的列:1。数据帧df:数据帧2。阈值:确定将删除哪些列。如果阈值为.9,则缺少90%值的列将被丢弃:1。带删除列的数据帧df(如果未删除任何列,则返回相同的数据帧) Excel文档截图 我编码了这个: 我必须有“自我、博士和阈值”,不能添加更多。代码必须通过下面的测试用例: 当我运行VT.drop_nan_col(df,0.9). head()时,我不
我有以下布尔值表: 我想创建一个具有相同索引的新数据帧,但每行都有前一列的前三个 True 列名。 如果一行少于三个真值,则新数据帧将具有空值。
问题内容: 我知道这个问题有很多主题,但是没有一种方法适合我,因此我将发布有关我的具体情况的信息 我有一个看起来像这样的数据框: 我想做的是将“性别”列中的全0替换为“女”,并将所有1替换为“男”,但是当我使用上面的代码时,数据框中的值似乎没有变化 我是否使用了replace()错误?还是有更好的方法进行条件值替换? 问题答案: 是的,您使用的是错误的,默认情况下不是就地操作,它会返回替换的数据框
我有这种熊猫。数据框。“a”、“b”是获得“x”和“y”时的条件。 我需要绘制关于相同条件的(x,y)结肠的折线图。预期结果图为: 当然,这个图像是由以下代码手动给出的: 我的问题是,当获得一个包含条件列x和y的数据帧时,如何动态地绘制如上所述的图。 列名是固定的。但是,条件列的值是动态更改的。因此,我不能使用10、20、100、200的值。 如果我有下面的“用a和b过滤”方法,我认为问题解决了:
我正在读熊猫的CSV文件。假设CSV如下所示: 我想从(即)中获取值,其中和。我确信只有一行符合此条件。 所以我在做这样的事情: 我尝试了来给我这个值,但是它返回了一个数据帧,索引是此行的行号。此处的行号不是0,而是1(即CSV文件中的原始行号),这不允许我执行 如何在这里获得列值?