Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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_Dataframe - Fatal编程技术网

Python 如何根据另一个数据帧上的列对数据帧的行进行分类?

Python 如何根据另一个数据帧上的列对数据帧的行进行分类?,python,pandas,dataframe,Python,Pandas,Dataframe,我正在像这样构建一个数据帧df df = pd.DataFrame({ 'South East Asia': ['India', 'Sri Lanka', 'Mali', 'Maldives'], 'Europe': ['France', 'Italy', 'Germany', 'Spain'], 'North America': ['Mexico', 'US', 'Canada', np.nan]}, columns=['South East Asia', 'E

我正在像这样构建一个数据帧
df

df = pd.DataFrame({
    'South East Asia': ['India', 'Sri Lanka', 'Mali', 'Maldives'],
    'Europe': ['France', 'Italy', 'Germany', 'Spain'],
    'North America': ['Mexico', 'US', 'Canada', np.nan]},
    columns=['South East Asia', 'Europe', 'North America'])
看起来是这样的:

  South East Asia   Europe North America
0           India   France        Mexico
1       Sri Lanka    Italy            US
2            Mali  Germany        Canada
3        Maldives    Spain           NaN
我在另一个数据框
df2
中有一个客户数据(~40K行),其中有一列
Country
,上面列出了所有11个国家的国家

我想在
df2
中创建一个新列,名为Continental,它将具有我的数据帧
df
中提到的相应大陆。因此,我的期望输出

print(df2.loc[:,'Country':'containment'])

会是

    Country    Continent
0   France        Europe
1    Italy        Europe
2   Mexico    North America
...
注意:在在线查询时,我发现有一些现成的工具可以将国家划分为大陆,这是可以理解的,因为社区中必须经常需要这样做。但我想学习如何根据另一个dataframes中的数据集对数据进行分类。这就是为什么我要在这11个国家和3个大洲实现同样的目标


提前谢谢

对字典使用dict理解和压扁:

s = {k:v for a, b in df.items() for k, v in dict.fromkeys(b, a).items()}
#if want remove NaNs
#s = {k:v for a, b in df.items() for k, v in dict.fromkeys(b, a).items() if pd.notnull(k)}
或使用以下内容创建系列:

最后:

使用,可以创建从国家到大陆的系列映射:

s = pd.melt(df).set_index('value')['variable']

df2['Continent'] = df2['Country'].map(s).fillna('DefaultContinent')
对于
NaN
,您可能需要格外小心。例如:

mapper = pd.melt(df).dropna(subset=['value']).set_index('value')['variable']

@Vibhu-在
df2
中是否没有
国家/地区
列?你需要
map
df2
嘿,你的代码行!很抱歉给你带来了困惑。非常感谢您对我前面问题的帮助。我的许多
pandas
查询都是通过您在SOI上的回答来解决的。我与一位联系人进行了尝试,他的国家/地区不包括在我的数据框
df
中,并将其映射到
NaN
。我想知道这是怎么发生的,是否有办法设置
默认映射@jezraelThank@jpp谢谢你的回答。没有
dropna(子集=['value'])
Nan
被映射到北美。但是当使用
mapper
而不是
s
时,
NaN
会按预期被删除。此外,对于其国家/地区未在
df
中列出的联系人,他们将被映射到
NaN
。有没有办法设置默认映射?@Vibhu,当然,这可以通过
pd.Series.fillna
实现,请参阅upate。
s = pd.melt(df).set_index('value')['variable']

df2['Continent'] = df2['Country'].map(s).fillna('DefaultContinent')
mapper = pd.melt(df).dropna(subset=['value']).set_index('value')['variable']