如果您确切地知道如何过滤数据帧,那么解决方案很简单:
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) 这困扰了我一段时间,我觉得必须要有一个解决方案,因为打印数据帧总是使列标题与它们各自的值对齐。
例:
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)
但是当我获取字符串并查看它时(在这种情况下,我将字符串传递给显示文本的PyQt小部件),这是输出:
任何帮助是极大的赞赏。
这是我想要做的:
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)
但是,如果过滤器是一个值数组,这显然不起作用.
任何帮助深表感谢.
从这个 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) 说我有以下数据框:
>>> 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) 我认为我在概念上缺少一些基本的东西,但我无法在文档中找到答案.
>>> 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)
不是第二种方式打破了分组?第一种方法是否始终确保仅使用该组中的其他值填充值?