小编yob*_*oya的帖子

pandas:是否可以使用任意长的布尔标准过滤数据帧?

如果您确切地知道如何过滤数据帧,那么解决方案很简单:

df[(df.A == 1) & (df.B == 1)]

但是,如果您接受用户输入并且事先不知道用户想要使用多少条件,该怎么办?例如,用户想要一个过滤的数据框,其中列[A,B,C] == 1.是否可以执行以下操作:

def filterIt(*args, value):
    return df[(df.*args == value)]
Run Code Online (Sandbox Code Playgroud)

所以如果用户调用filterIt(A, B, C, value=1),则返回:

df[(df.A == 1) & (df.B == 1) & (df.C == 1)]
Run Code Online (Sandbox Code Playgroud)

python pandas

7
推荐指数
2
解决办法
610
查看次数

熊猫:如何获取.to_string()方法以将列标题与列值对齐?

这困扰了我一段时间,我觉得必须要有一个解决方案,因为打印数据帧总是使列标题与它们各自的值对齐。

例:

df = pd.DataFrame({'First column name': [1234, 2345, 3456], 'Second column name': [5432,4321,6543], 'Third column name': [1236,3457,3568]})
df_string = df.to_string(justify='left', col_space='30')
Run Code Online (Sandbox Code Playgroud)


现在,当您打印df_string时,您将获得所需的格式:http://i.imgur.com/Xyoy4Op.png

但是当我获取字符串并查看它时(在这种情况下,我将字符串传递给显示文本的PyQt小部件),这是输出: http://i.imgur.com/a1NcBQA.png

(这是该字符串在我的控制台上的显示方式): http://i.imgur.com/WRHEhKB.png



任何帮助是极大的赞赏。

python pandas

6
推荐指数
1
解决办法
2602
查看次数

按子数组值过滤对象数组

这是我想要做的:

movies = [{'title': 'a', 'genres': ['Romance', 'Comedy']}, 
          {'title': 'b', 'genres': ['Drama', 'Comedy']}, 
          {'title': 'c', 'genres': ['Action', 'Adventure']}]

filters = ['Romance', 'Drama']
Run Code Online (Sandbox Code Playgroud)

过滤数组的所需内容:

[{'title': 'a', 'genres': ['Romance', 'Comedy']}, 
 {'title': 'b', 'genres': ['Drama', 'Comedy']}]
Run Code Online (Sandbox Code Playgroud)

问题是我不知道如何在给定另一个值数组的情况下过滤数组.如果'filters'只是一个字符串,那么我可以这样做:

movies.filter(x => x.genres.includes(filters))
Run Code Online (Sandbox Code Playgroud)

但是,如果过滤器是一个值数组,这显然不起作用.

任何帮助深表感谢.

javascript arrays

6
推荐指数
1
解决办法
2035
查看次数

(熊猫)根据顺序无关紧要的子集删除重复项

从这个 df 去的正确方法是什么:

>>> df=pd.DataFrame({'a':['jeff','bob','jill'], 'b':['bob','jeff','mike']})
>>> df
      a     b
0  jeff   bob
1   bob  jeff
2  jill  mike
Run Code Online (Sandbox Code Playgroud)

对此:

>>> df2
      a     b
0  jeff   bob
2  jill  mike
Run Code Online (Sandbox Code Playgroud)

根据“a”和“b”中的项目删除重复的行,而不考虑它们的特定列。

我可以使用 lambda 表达式组合一个解决方案来创建掩码,然后根据掩码列删除重复项,但我认为必须有比这更简单的方法:

>>> df['c'] = df[['a', 'b']].apply(lambda x: ''.join(sorted((x[0], x[1]), \
 key=lambda x: x[0]) + sorted((x[0], x[1]), key=lambda x: x[1] )), axis=1)
>>> df.drop_duplicates(subset='c', keep='first', inplace=True)
>>> df = df.iloc[:,:-1]
Run Code Online (Sandbox Code Playgroud)

pandas

5
推荐指数
1
解决办法
1763
查看次数

(熊猫)基于groupby对象中的第一个元素创建新列

说我有以下数据框:

>>> df = pd.DataFrame({'Person': ['bob', 'jim', 'joe', 'bob', 'jim', 'joe'], 'Color':['blue', 'green', 'orange', 'yellow', 'pink', 'purple']})
>>> df

    Color Person
0    blue    bob
1   green    jim
2  orange    joe
3  yellow    bob
4    pink    jim
5  purple    joe
Run Code Online (Sandbox Code Playgroud)

我想创建一个新列,代表每个人看到的第一种颜色:

     Color Person First Color
0    blue    bob        blue
1   green    jim       green
2  orange    joe      orange
3  yellow    bob        blue
4    pink    jim       green
5  purple    joe      orange
Run Code Online (Sandbox Code Playgroud)

我提出了一个解决方案,但它似乎效率很低:

>>> df['First Color'] = 0
>>> groups = df.groupby(['Person'])['Color']
>>> for …
Run Code Online (Sandbox Code Playgroud)

pandas

3
推荐指数
2
解决办法
177
查看次数

(pandas)为什么.bfill().ffill()的行为与ffill().bfill()在群组上的行为不同?

我认为我在概念上缺少一些基本的东西,但我无法在文档中找到答案.

>>> df=pd.DataFrame({'a':[1,1,2,2,3,3], 'b':[5,np.nan, 6, np.nan, np.nan, np.nan]})
>>> df
   a    b
0  1  5.0
1  1  NaN
2  2  6.0
3  2  NaN
4  3  NaN
5  3  NaN
Run Code Online (Sandbox Code Playgroud)

使用ffill()然后使用bfill():

>>> df.groupby('a')['b'].ffill().bfill()
0    5.0
1    5.0
2    6.0
3    6.0
4    NaN
5    NaN
Run Code Online (Sandbox Code Playgroud)

使用bfill()然后使用ffill():

>>> df.groupby('a')['b'].bfill().ffill()
0    5.0
1    5.0
2    6.0
3    6.0
4    6.0
5    6.0
Run Code Online (Sandbox Code Playgroud)

不是第二种方式打破了分组?第一种方法是否始终确保仅使用该组中的其他值填充值?

group-by pandas pandas-groupby

3
推荐指数
1
解决办法
1045
查看次数

标签 统计

pandas ×5

python ×2

arrays ×1

group-by ×1

javascript ×1

pandas-groupby ×1