我正在尝试在给定此 groupby 索引的表上执行 groupby,所有值都是正确的或 Nan。例如:
id country name
0 1 France None
1 1 France Pierre
2 2 None Marge
3 1 None Pierre
4 3 USA Jim
5 3 None Jim
6 2 UK None
7 4 Spain Alvaro
8 2 None Marge
9 3 None Jim
10 4 Spain None
11 3 None Jim
Run Code Online (Sandbox Code Playgroud)
我只想获取 4 个人中每个人的值,这些值不应该发生冲突,例如:
country name
id
1 France Pierre
2 UK Marge
3 USA Jim
4 Spain Alvaro
Run Code Online (Sandbox Code Playgroud)
我试过了:
groupby().first()
groupby.nth(0,dropna='any'/'all')
Run Code Online (Sandbox Code Playgroud)
乃至
groupby().apply(lambda x: …Run Code Online (Sandbox Code Playgroud) 如果我有一个在索引中有重复的数据帧,我将如何创建一组索引中没有重复的数据帧?
更准确地说,给定数据框:
a b
1 1 6
1 2 7
2 3 8
2 4 9
2 5 0
Run Code Online (Sandbox Code Playgroud)
我想要一个数据框列表作为输出:
a b
1 1 6
2 3 8
a b
1 2 7
2 4 9
a b
2 5 0
Run Code Online (Sandbox Code Playgroud)
这需要根据重复的数量根据需要扩展到尽可能多的数据帧。
我有很长的循环用于重复名称,我希望通过使用函数简化事情,而不是每次都重复匹配的所有附带效果.我从以下测试用例开始,但它不像我期望的那样工作:
x, y = 0, 0
def testFunc(*args):
global x, y
for arg in args:
if arg:
x +=1
else:
y +=1
return (x, y)
Run Code Online (Sandbox Code Playgroud)
当我运行它:
>>>testFunc(x==y,x==y,x==y)
(3,0)
>>>testFunc(x==y)
(3,1)
>>>testFunc(x!=y,x!=y,x!=y)
(3,4)
Run Code Online (Sandbox Code Playgroud)
基本上,在任何操作发生之前,参数似乎都会转换为布尔值.有没有办法避免这种情况?我原以为:
>>>testFunc(x==y,x==y,x==y)
(2,1)
>>>testFunc(x==y)
(2,2)
>>>testFunc(x!=y,x!=y,x!=y)
(4,3)
Run Code Online (Sandbox Code Playgroud) 这是一个非常笼统的问题,我正在寻求解决方案,以应对以下情况:
我经常发现自己在数据框中创建了一个额外的列,并且我想使用类似以下的内容:
df['new_col'] = df['old_col_1']+df['old_col_2']
Run Code Online (Sandbox Code Playgroud)
但是,除非操作非常简单,否则它会给出“ TypeError:无法将序列转换为[class'whatever']类”,因此我必须使用笨拙的方法。例:
df = pd.DataFrame({'Year':[2018,2017,2016,2017,2016,2018,2018],'Month':[1,1,1,2,2,2,3],
'Value':[521,352,32,125,662,123,621]})
Run Code Online (Sandbox Code Playgroud)
我想要一个“日期”列,并且最终这样做:
from datetime import datetime as dt
df['Date'] = None
for i in df.index:
df1.loc[i,'Date'] = dt(df1.loc[i,'Year'],df1.loc[i,'variable'],1)
Run Code Online (Sandbox Code Playgroud)
在其他情况下,我发现自己在做:
datelist = []
for i in df.index:
datelist.append(dt(df1.loc[i,'Year'],df1.loc[i,'variable'],1))
df['Date'] = datelist
Run Code Online (Sandbox Code Playgroud)
显然,这只是一个示例,在很多情况下,我最终都会使用这两种方法。我是否正确地认为这些方法不是pythonic的?基于其他列生成稍微复杂的列的更好方法是什么?
我有一列值以字符串形式列出,以';分隔。',我想为每个单独的值生成true / false列。该数据帧很大(100k行,13个值),我当前的代码在该数据帧中每秒大约执行1.5行。有专门的熊猫功能可以更快地做到这一点吗?还是我犯了一个明显的错误,使我的代码变慢了?
数据如下:
id likes colour
0 1 blue
1 2 blue; green; red
2 3 red; purple
3 4 purple; blue
4 5 yellow; red
5 6 yellow
Run Code Online (Sandbox Code Playgroud)
输出为:
id likes colour red yellow blue purple green
0 1 blue False False True False False
1 2 blue; green; red True False True False True
2 3 red; purple True False False True False
3 4 purple; blue False False True True False
4 5 yellow; red True …Run Code Online (Sandbox Code Playgroud)