使用pandas和numpy我正在尝试处理数据框中的列,并希望创建一个包含与之相关的值的新列.因此,如果在列x中存在值1,则在新列中它将是a,对于值2,它将是b等
我可以针对单一条件这样做,即
df['new_col'] = np.where(df['col_1'] == 1, a, n/a)
Run Code Online (Sandbox Code Playgroud)
我可以找到多个条件的例子,即如果x = 3或x = 4,则该值应该是a,但是如果x = 3,则该值应为a,如果x = 4,则该值为c.
我试过简单地运行两行代码,例如:
df['new_col'] = np.where(df['col_1'] == 1, a, n/a)
df['new_col'] = np.where(df['col_1'] == 2, b, n/a)
Run Code Online (Sandbox Code Playgroud)
但显然第二行会覆盖.我错过了一些关键的东西吗
我有一个基本的价值表:
import pandas as pd
import numpy as np
test = pd.read_csv('mean_test.csv')
test.replace('n/a',np.nan)
test
value1 value2 value3
1 9 5
5 NaN 4
9 55 NaN
NaN 4 9
Run Code Online (Sandbox Code Playgroud)
我想计算三个值的平均值,忽略NaN,所以对于第二行,它将是(5 + 4)/ 2.因此我不能使用.replace函数在NaN的位置放置零.我已经搜索了其他一些问题,但找不到任何涵盖此问题的内容.我错过了一些明显的东西吗
我可能正在接近这是错误的方式.如果我有两个数据帧a和b:
数据帧A:
a b c
1 2 4
1 6 5
1 8 7
Run Code Online (Sandbox Code Playgroud)
和Dataframe B:
a b c d
1 2 4 9
1 6 5 7
1 8 7 10
Run Code Online (Sandbox Code Playgroud)
我想加入它们,但是暂时将列名匹配的列加起来,并保留不匹配的列名.所以最终的连接表看起来像:
a b c d
2 4 8 9
2 12 10 7
2 16 14 10
Run Code Online (Sandbox Code Playgroud)
注意:索引始终匹配(即相同顺序的记录数相同)
如果我有桌子:
a b c
15 15 5
20 10 7
25 30 9
Run Code Online (Sandbox Code Playgroud)
并且想要做两件事1)选择轴上具有最高值的列并将其分配给列2)获取值并将其分配给另一列,例如:
a b c 1st 1st_value 2nd 2nd_value 3rd 3rd_value
15 15 5 a/b 15 c 5 NaN NaN
20 10 7 a 20 b 10 c 7
25 30 9 b 30 a 25 c 9
Run Code Online (Sandbox Code Playgroud)
这可能吗?
如果我有一个简单的表,例如:
index location col1 col2 col3 col4
1 a TRUE yes 1 4
2 a FALSE null 2 6
3 b TRUE null 6 3
4 b TRUE no 3 4
5 b FALSE yes 4 6
6 c TRUE no 57 8
7 d FALSE null 74 9
Run Code Online (Sandbox Code Playgroud)
如果我想聚合位置中的重复记录,即两个 a 或三个 b,我一直在使用基本的 groupby 函数。这适用于简单的表。
但是,是否可以扩展此功能以在聚合时允许每列规则?作为 col1 的示例,如果 TRUE 存在,它将胜过任何 FALSE 值,或者在 col3 中,它将对值求和,而在 col4 中它添加计算平均值?是否可以为每列定义这些规则,然后在使用 groupby 时应用它们?
我在网上搜索过,但没有找到任何似乎可以涵盖这一点的内容,但是我可能找错了树。
谢谢。
如果我有一个简单的数据框,例如:
q_1 q_1_mark q_2 q_2_mark
TRUE a 1 c
FALSE b 2
TRUE c 3
Run Code Online (Sandbox Code Playgroud)
我如何填写 q_2_mark 列的空白值,使它们与 q_1_mark 匹配?所以步骤是:
我可以进行强力复制和粘贴样式格式设置,但这会丢失包含与前一列不同的任何单元格,即 a --> c
不确定正确的标题.但我需要从数据框中取出一个列,并显示前五个结果.该列是整数和不适合结果的混合.作为一个例子,我创建了一个基本数据帧:
regiona col1
a n/a
a 1
a 200
b 208
b 400
b 560
b 600
c 800
c 1120
c 1200
c 1680
d n/a
d n/a
Run Code Online (Sandbox Code Playgroud)
所以运行:
import pandas as pd
df = pd.read_csv('test_data.csv')
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个基本函数,所以我可以在不同的列上使用它,所以构造:
def max_search(indicator):
displaced_count = df[df[indicator] != 'n/a']
table = displaced_count.sort_values([indicator], ascending=[False])
return table.head(5)
Run Code Online (Sandbox Code Playgroud)
但是当我跑步的时候
max_search('col1')
Run Code Online (Sandbox Code Playgroud)
它返回:
regiona col1
7 c 800
6 b 600
5 b 560
4 b 400
3 b 208
Run Code Online (Sandbox Code Playgroud)
所以它错过了大于800的任何东西.我认为该功能应该做的步骤是:
但是,它没有返回超过800的东西?我错过了很明显的东西吗?
我无法调整它,因为它只响应1到100之间的值.我知道它的简单,但通过搜索找不到任何东西.
while True:
Mynumber = raw_input('Enter number of random points')
if Mynumber == '0 < 100':
print 'number choosen'
Mynumber = int(Mynumber)
break
Run Code Online (Sandbox Code Playgroud)