我有一个有两列的pandas数据框.我需要更改第一列的值而不影响第二列,只需更改第一列值即可返回整个数据框.我怎么能用熊猫申请呢?
我想在数据框中添加一个列'D',如下所示:
U,L
111,en
112,en
112,es
113,es
113,ja
113,zh
114,es
Run Code Online (Sandbox Code Playgroud)
基于以下词典:
d = {112: 'en', 113: 'es', 114: 'es', 111: 'en'}
Run Code Online (Sandbox Code Playgroud)
以便生成的数据框显示为:
U,L,D
111,en,en
112,en,en
112,es,en
113,es,es
113,ja,es
113,zh,es
114,es,es
Run Code Online (Sandbox Code Playgroud)
到目前为止,我尝试了该pd.join()方法,但我无法弄清楚它如何与字典一起使用.
我在将Seaborn Jointplot放在多列中时遇到了问题subplot.
import pandas as pd
import seaborn as sns
df = pd.DataFrame({'C1': {'a': 1,'b': 15,'c': 9,'d': 7,'e': 2,'f': 2,'g': 6,'h': 5,'k': 5,'l': 8},
'C2': {'a': 6,'b': 18,'c': 13,'d': 8,'e': 6,'f': 6,'g': 8,'h': 9,'k': 13,'l': 15}})
fig = plt.figure();
ax1 = fig.add_subplot(121);
ax2 = fig.add_subplot(122);
sns.jointplot("C1", "C2", data=df, kind='reg', ax=ax1)
sns.jointplot("C1", "C2", data=df, kind='kde', ax=ax2)
Run Code Online (Sandbox Code Playgroud)
注意如何只将一部分jointplot放置在子图内,其余部分留在另外两个图框内.我想要的是distributions同时插入内部subplots.
有人能帮忙吗?
我有一个数据框df1,看起来像:
c k l
0 A 1 a
1 A 2 b
2 B 2 a
3 C 2 a
4 C 2 d
Run Code Online (Sandbox Code Playgroud)
另一个叫做df2:
c l
0 A b
1 C a
Run Code Online (Sandbox Code Playgroud)
我想过滤df1只保留不在的值df2.要过滤的值应为as (A,b)和(C,a)tuples.到目前为止,我尝试应用该isin方法:
d = df[~(df['l'].isin(dfc['l']) & df['c'].isin(dfc['c']))]
Run Code Online (Sandbox Code Playgroud)
除了在我看来太复杂,它返回:
c k l
2 B 2 a
4 C 2 d
Run Code Online (Sandbox Code Playgroud)
但我期待:
c k l
0 A 1 a
2 B 2 a
4 C 2 …Run Code Online (Sandbox Code Playgroud) 我有这个简单的数据帧df:
df = pd.DataFrame({'c':[1,1,1,2,2,2,2],'type':['m','n','o','m','m','n','n']})
Run Code Online (Sandbox Code Playgroud)
我的目标是计算type每个的值c,然后添加一个大小为的列c.所以从:
In [27]: g = df.groupby('c')['type'].value_counts().reset_index(name='t')
In [28]: g
Out[28]:
c type t
0 1 m 1
1 1 n 1
2 1 o 1
3 2 m 2
4 2 n 2
Run Code Online (Sandbox Code Playgroud)
第一个问题解决了.然后我还可以:
In [29]: a = df.groupby('c').size().reset_index(name='size')
In [30]: a
Out[30]:
c size
0 1 3
1 2 4
Run Code Online (Sandbox Code Playgroud)
如何将size列直接添加到第一个数据框?到目前为止我用过map:
In [31]: a.index = a['c']
In [32]: g['size'] = g['c'].map(a['size'])
In [33]: …Run Code Online (Sandbox Code Playgroud) 我有这个人.数据帧:
datetime
2012-01-01 125.5010
2012-01-02 125.5010
2012-01-03 125.5010
2012-02-04 125.5010
2012-02-05 125.5010
2012-02-29 125.5010
2012-02-28 125.5010
2016-01-07 125.5010
2016-01-08 125.5010
2016-02-29 81.6237
Run Code Online (Sandbox Code Playgroud)
我想删除对应于2月29日的所有行,导致foll.数据框:
datetime
2012-01-01 125.5010
2012-01-02 125.5010
2012-01-03 125.5010
2012-02-04 125.5010
2012-02-05 125.5010
2012-02-28 125.5010
2016-01-07 125.5010
2016-01-08 125.5010
Run Code Online (Sandbox Code Playgroud)
现在,我只是手动完成:
df.drop(df.index[['2012-02-29']]).我怎样才能使它适用于所有年份,而不必手动指定行索引.
我有18个数据框的列表:
dfList = [df1, df2, df3, df4, df5, df6.....df18]
Run Code Online (Sandbox Code Playgroud)
所有数据框都有一个共同的id列,因此很容易将它们与pd.merge 2一起连接在一起.有没有办法一次性加入它们,以便dfList作为单个数据帧返回?
我刚遇到以下问题.从两个数组开始,执行布尔比较,如:
In [47]: a1 = np.random.randint(0,10,size=1000000)
In [48]: a2 = np.random.randint(0,10,size=1000000)
In [52]: a1[:,None] == a2
Out[52]: False
Run Code Online (Sandbox Code Playgroud)
返回布尔值而不是布尔数组,而:
In [62]: a1 = np.random.randint(0,10,size=10000)
In [63]: a2 = np.random.randint(0,10,size=10000)
In [64]: a1[:,None] == a2
Out[64]:
array([[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[ True, False, False, ..., False, False, False],
[False, False, False, ..., True, False, False]], dtype=bool) …Run Code Online (Sandbox Code Playgroud) 我一直在使用User_ID,DateTime对象和其他信息来处理DataFrame,如下面的摘录:
User_ID;Latitude;Longitude;Datetime
222583401;41.4020375;2.1478710;2014-07-06 20:49:20
287280509;41.3671346;2.0793115;2013-01-30 09:25:47
329757763;41.5453577;2.1175164;2012-09-25 08:40:59
189757330;41.5844998;2.5621569;2013-10-01 11:55:20
624921653;41.5931846;2.3030671;2013-07-09 20:12:20
414673119;41.5550136;2.0965829;2014-02-24 20:15:30
414673119;41.5550136;2.0975829;2014-02-24 20:16:30
414673119;41.5550136;2.0985829;2014-02-24 20:17:30
Run Code Online (Sandbox Code Playgroud)
我将用户分组为:
g = df.groupby(['User_ID','Datetime'])
Run Code Online (Sandbox Code Playgroud)
然后检查没有单个DataTime对象:
df = df.groupby('User_ID')['Datetime'].apply(lambda g: len(g)>1)
Run Code Online (Sandbox Code Playgroud)
我已经获得了以下布尔数据框架:
User_ID
189757330 False
222583401 False
287280509 False
329757763 False
414673119 True
624921653 False
Name: Datetime, dtype: bool
Run Code Online (Sandbox Code Playgroud)
这对于我的目的来说只保留User_ID为True掩码值.现在我只想保留与True值关联的User_ID值,并将它们写入新的DataFrame pandas.to_csv,例如.预期的DataFrame将仅包含具有多个DateTime对象的User_ID:
User_ID;Latitude;Longitude;Datetime
414673119;41.5550136;2.0965829;2014-02-24 20:15:30
414673119;41.5550136;2.0975829;2014-02-24 20:16:30
414673119;41.5550136;2.0985829;2014-02-24 20:17:30
Run Code Online (Sandbox Code Playgroud)
我怎样才能访问每个User_ID的布尔值?谢谢你的帮助.
从这个数据帧df开始:
df = pd.DataFrame({'c':[1,1,1,2,2,2],'l1':['a','a','b','c','c','b'],'l2':['b','d','d','f','e','f']})
c l1 l2
0 1 a b
1 1 a d
2 1 b d
3 2 c f
4 2 c e
5 2 b f
Run Code Online (Sandbox Code Playgroud)
我想在c列上执行groupby 以获取l1和l2列的唯一值.对于我可以做的一列:
g = df.groupby('c')['l1'].unique()
Run Code Online (Sandbox Code Playgroud)
正确返回:
c
1 [a, b]
2 [c, b]
Name: l1, dtype: object
Run Code Online (Sandbox Code Playgroud)
但使用:
g = df.groupby('c')['l1','l2'].unique()
Run Code Online (Sandbox Code Playgroud)
收益:
AttributeError: 'DataFrameGroupBy' object has no attribute 'unique'
Run Code Online (Sandbox Code Playgroud)
我知道我可以用(以及其他)获得两列的唯一值:
In [12]: np.unique(df[['l1','l2']])
Out[12]: array(['a', 'b', 'c', 'd', 'e', 'f'], dtype=object)
Run Code Online (Sandbox Code Playgroud)
有没有办法将此方法应用于groupby,以获得类似的东西:
c …Run Code Online (Sandbox Code Playgroud) python ×10
pandas ×9
dataframe ×2
python-3.x ×2
arrays ×1
matplotlib ×1
numpy ×1
python-3.5 ×1
seaborn ×1