我有以下数据帧:
Index_Date A B C D
===============================
2015-01-31 10 10 Nan 10
2015-02-01 2 3 Nan 22
2015-02-02 10 60 Nan 280
2015-02-03 10 100 Nan 250
Run Code Online (Sandbox Code Playgroud)
要求:
Index_Date A B C D
===============================
2015-01-31 10 10 10 10
2015-02-01 2 3 23 22
2015-02-02 10 60 290 280
2015-02-03 10 100 3000 250
Run Code Online (Sandbox Code Playgroud)
Column C导出用于2015-01-31通过取value的D.
然后,我需要使用value的C用于2015-01-31和乘以value的A上2015-02-01添加B.
我尝试了一个apply …
这应该是直截了当的,但我发现的最接近的是这篇文章: 熊猫:填写组内的缺失值,我仍然无法解决我的问题....
假设我有以下数据帧
df = pd.DataFrame({'value': [1, np.nan, np.nan, 2, 3, 1, 3, np.nan, 3], 'name': ['A','A', 'B','B','B','B', 'C','C','C']})
name value
0 A 1
1 A NaN
2 B NaN
3 B 2
4 B 3
5 B 1
6 C 3
7 C NaN
8 C 3
Run Code Online (Sandbox Code Playgroud)
并且我想在每个"名称"组中填写"NaN",其中包含平均值
name value
0 A 1
1 A 1
2 B 2
3 B 2
4 B 3
5 B 1
6 C 3
7 C 3
8 C 3
Run Code Online (Sandbox Code Playgroud)
我不确定去哪里: …
假设我有一个数据框,其国家/地区如下:
cc | temp
US | 37.0
CA | 12.0
US | 35.0
AU | 20.0
Run Code Online (Sandbox Code Playgroud)
我知道有一个pd.get_dummies函数可以将这些国家/地区转换为"单热编码".但是,我希望将它们转换为索引,以便我得到它cc_index = [1,2,1,3].
我假设有一种比使用get_dummies和numpy where子句更快的方法,如下所示:
[np.where(x) for x in df.cc.get_dummies().values]
使用'因子'在R中这样做有点容易,所以我希望大熊猫有类似的东西.
我有一个python列表,其中元素可以重复.
>>> a = [1,2,2,3,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)
我想n从列表中获取第一个独特的元素.所以,在这种情况下,如果我想要前5个独特元素,它们将是:
[1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
我已经提出了使用生成器的解决方案:
def iterate(itr, upper=5):
count = 0
for index, element in enumerate(itr):
if index==0:
count += 1
yield element
elif element not in itr[:index] and count<upper:
count += 1
yield element
Run Code Online (Sandbox Code Playgroud)
正在使用:
>>> i = iterate(a, 5)
>>> [e for e in i]
[1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
我怀疑这是最优化的解决方案.是否有一种替代策略可以实现以更加pythonic和更有效的方式编写它?
我有一个数据框,我想知道给定列有多少次具有最频繁的值.
我试着用以下方式做到这一点:
items_counts = df['item'].value_counts()
max_item = items_counts.max()
Run Code Online (Sandbox Code Playgroud)
结果我得到:
ValueError: cannot convert float NaN to integer
Run Code Online (Sandbox Code Playgroud)
据我所知,在第一行我得到的系列中,列的值被用作键,这些值的频率被用作值.所以,我只需要找到该系列中最大的值,并且由于某种原因,它不起作用.有谁知道如何解决这个问题?
我有一个pandas数据框,其中前3列是字符串:
ID text1 text 2
0 2345656 blah blah
1 3456 blah blah
2 541304 blah blah
3 201306 hi blah
4 12313201308 hello blah
Run Code Online (Sandbox Code Playgroud)
我想在ID中添加前导零:
ID text1 text 2
0 000000002345656 blah blah
1 000000000003456 blah blah
2 000000000541304 blah blah
3 000000000201306 hi blah
4 000012313201308 hello blah
Run Code Online (Sandbox Code Playgroud)
我试过了:
df['ID'] = df.ID.zfill(15)
df['ID'] = '{0:0>15}'.format(df['ID'])
Run Code Online (Sandbox Code Playgroud) 获取OrderedDictPython 3 第一项的最短方法是什么?
我最好的:
list(ordered_dict.items())[0]
Run Code Online (Sandbox Code Playgroud)
相当漫长而丑陋.
我能想到:
next(iter(ordered_dict.items())) # Fixed, thanks Ashwini
Run Code Online (Sandbox Code Playgroud)
但它不是很自我描述.
有更好的建议吗?
我有一个数据系列,如下所示:
print mys
id_L1
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
Run Code Online (Sandbox Code Playgroud)
我想检查一下所有值是否为NaN.
我的尝试:
pd.isnull(mys).all()
Run Code Online (Sandbox Code Playgroud)
输出:
True
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
我有一个包含重复项目的列表,我想要一个具有频率的唯一项目列表.
例如,我有['a', 'a', 'b', 'b', 'b'],我想要[('a', 2), ('b', 3)].
寻找一种简单的方法来做到这一点,而不需要循环两次.
我觉得有一种比这更好的方法:
import pandas as pd
df = pd.DataFrame(
[['A', 'X', 3], ['A', 'X', 5], ['A', 'Y', 7], ['A', 'Y', 1],
['B', 'X', 3], ['B', 'X', 1], ['B', 'X', 3], ['B', 'Y', 1],
['C', 'X', 7], ['C', 'Y', 4], ['C', 'Y', 1], ['C', 'Y', 6]],
columns=['c1', 'c2', 'v1'])
def callback(x):
x['seq'] = range(1, x.shape[0] + 1)
return x
df = df.groupby(['c1', 'c2']).apply(callback)
print df
Run Code Online (Sandbox Code Playgroud)
为达到这个:
c1 c2 v1 seq
0 A X 3 1
1 A X 5 2
2 A …Run Code Online (Sandbox Code Playgroud)