Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 填补贸易逆差_Python_Pandas - Fatal编程技术网

Python 填补贸易逆差

Python 填补贸易逆差,python,pandas,Python,Pandas,我有以下建议: import pandas as pd df = pd.DataFrame( {"col1": [2000, 2000, 2000, '', 2001, 2001, '', '', 2002], "col2": ["b1", "c1", "d1", '' , "c1", "d1", '', '', "d1"], &qu

我有以下建议:

import pandas as pd
df = pd.DataFrame(
{"col1": [2000, 2000, 2000, '', 2001, 2001, '', '', 2002],
 "col2": ["b1", "c1", "d1", '' , "c1", "d1", '', '', "d1"],
 "col3": [10, 20, 30, '', 20, 40, '', '', 60]  
}
)
df

    col1    col2    col3
0   2000    b1       10
1   2000    c1       20
2   2000    d1       30
3           
4   2001    c1       20
5   2001    d1       40
6           
7           
8   2002    d1       60
我需要3行从2000年到2002年的每个日期,每个日期将有b1,c1和d1。当一行丢失时(如第3行、第6行和第7行),我希望填充它,以便它有一个日期,b1、c1或d1和col3将是0,就像下面的df2一样:

df2 = pd.DataFrame(
{"col1": [2000, 2000, 2000, 2001, 2001, 2001, 2002, 2002, 2002],
 "col2": ["b1", "c1", "d1", "b1" , "c1", "d1", "b1", "c1", "d1"],
 "col3": [10, 20, 30, 0, 20, 40, 0, 0, 60]  
}
)
df2

    col1    col2    col3
0   2000    b1      10
1   2000    c1      20
2   2000    d1      30
3   2001    b1      0
4   2001    c1      20
5   2001    d1      40
6   2002    b1      0
7   2002    c1      0
8   2002    d1      60

如何在熊猫身上做到这一点?(我有一个像这样的大数据框,有很多日期,不仅仅是3天,但这个例子将帮助我了解这一点!)

您可以将预期值与年份进行笛卡尔乘积,并创建可能性

然后合并(左连接)并填充:

df = df.replace('',np.nan).dropna(subset=['col1'])
rows = ['b1','c1','d1']
possibilities = pd.MultiIndex.from_product((df['col1'].unique(),rows))

out = (pd.DataFrame(possibilities.tolist(),columns=['col1','col2'])
       .merge(df,how='left').fillna({"col3":0},downcast='infer'))
out['col1']= out['col1'].astype(int)
或:



您可以将预期值与年份进行笛卡尔积,并创建可能性

然后合并(左连接)并填充:

df = df.replace('',np.nan).dropna(subset=['col1'])
rows = ['b1','c1','d1']
possibilities = pd.MultiIndex.from_product((df['col1'].unique(),rows))

out = (pd.DataFrame(possibilities.tolist(),columns=['col1','col2'])
       .merge(df,how='left').fillna({"col3":0},downcast='infer'))
out['col1']= out['col1'].astype(int)
或:


对于不存在的组合,用于添加
0

df = df2.replace('',np.nan).dropna(subset=['col1'])
rows = ['b1','c1','d1']
mux = pd.MultiIndex.from_product((df['col1'].unique(),rows), names=['col1','col2'])

df = df2.set_index(['col1','col2']).reindex(mux, fill_value=0).reset_index()
print (df)
   col1 col2  col3
0  2000   b1    10
1  2000   c1    20
2  2000   d1    30
3  2001   b1     0
4  2001   c1    20
5  2001   d1    40
6  2002   b1     0
7  2002   c1     0
8  2002   d1    60
对于不存在的组合,用于添加
0

df = df2.replace('',np.nan).dropna(subset=['col1'])
rows = ['b1','c1','d1']
mux = pd.MultiIndex.from_product((df['col1'].unique(),rows), names=['col1','col2'])

df = df2.set_index(['col1','col2']).reindex(mux, fill_value=0).reset_index()
print (df)
   col1 col2  col3
0  2000   b1    10
1  2000   c1    20
2  2000   d1    30
3  2001   b1     0
4  2001   c1    20
5  2001   d1    40
6  2002   b1     0
7  2002   c1     0
8  2002   d1    60

首先用NaN填充原始空字符串

df=df.replace(“”,np.nan)
然后从中创建一个虚拟数据帧

dummy=pd.DataFrame([[x,y]表示df['col1'].dropna().unique()表示df['col2'].dropna().unique()],列=['col1',col2']
#您也可以尝试使用多索引
#mux=pd.MultiIndex.from_乘积((df['col1'].dropna().unique(),df['col2'].dropna().unique()),name=['col1','col2']))
#dummy=pd.DataFrame({'col3':[0]*len(mux)},index=mux.reset_index().reset_index()
最后,使用虚拟数据帧更新原始数据帧中的
NaN

df.update(虚拟,覆盖=False)
df.fillna(0,原地=真)

首先用NaN填充原始空字符串

df=df.replace(“”,np.nan)
然后从中创建一个虚拟数据帧

dummy=pd.DataFrame([[x,y]表示df['col1'].dropna().unique()表示df['col2'].dropna().unique()],列=['col1',col2']
#您也可以尝试使用多索引
#mux=pd.MultiIndex.from_乘积((df['col1'].dropna().unique(),df['col2'].dropna().unique()),name=['col1','col2']))
#dummy=pd.DataFrame({'col3':[0]*len(mux)},index=mux.reset_index().reset_index()
最后,使用虚拟数据帧更新原始数据帧中的
NaN

df.update(虚拟,覆盖=False)
df.fillna(0,原地=真)

@jezrael谢谢,TIL:)编辑为包含该内容,此处应使用reindex,添加到答案中。@jezrael是的,我们也可以使用reindex解决+1@jezrael谢谢,TIL:)编辑为包含该内容,此处应使用reindex,添加到答案中。@jezrael是的,我们也可以使用reindex解决+1.
print(dummy)

     col1 col2
0  2000.0   b1
1  2000.0   c1
2  2000.0   d1
3  2001.0   b1
4  2001.0   c1
5  2001.0   d1
6  2002.0   b1
7  2002.0   c1
8  2002.0   d1
print(df)

     col1 col2  col3
0  2000.0   b1  10.0
1  2000.0   c1  20.0
2  2000.0   d1  30.0
3  2001.0   b1   0.0
4  2001.0   c1  20.0
5  2001.0   d1  40.0
6  2002.0   b1   0.0
7  2002.0   c1   0.0
8  2002.0   d1  60.0