我有一个数据帧,其中一些行的Sold-To Country Name
列的值为Not: XX XX XX
,这意味着Sold-To Country Codes
中除XX XX XX
之外的其余部分将向映射的Reporting Country
报告。你知道吗
另一个要求是,如果Sold-To Country Code
是null
(或NaN
),它将捕获该SalesOrg中所有国家代码的所有收入。你知道吗
df_mapping = pd.DataFrame({'SalesOrg Code':['0001','0002','0002','0002','0002'],
'Reporting Country':['Spain','UK','UK','UK','Netherlands'],
'Sold-To Country Code':[np.nan,'IE','FR','IT','Ex:'],
'Sold-To Country Name':[np.nan,'Ireland','France','Italy','NOT: FR IE IT']})
SalesOrg Code Reporting Country Sold-To Country Code Sold-To Country Name
0001 Spain null null
0002 UK IE Ireland
0002 UK FR France
0002 UK IT Italy
0002 Netherlands Ex: NOT: FR IE IT
.......
将有另一个数据框与全球国家代码的完整列表,我们可以在那里搜索其余的国家代码。你知道吗
数据帧示例:
df_countrylist = pd.DataFrame(["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR",
"AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE",
"BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO",
"BN", "BG", "BF", "BI", "CV", "KH", "CM", "CA", "KY", "CF", "TD",
"CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI",
"HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG",
"SV", "GQ", "ER", "EE", "ET", "FK", "FO", "FJ", "FI", "FR", "GF",
"PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD",
"GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN",
"HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT",
"JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "KW", "KG",
"LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK",
"MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT",
"MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA",
"NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MP",
"NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN",
"PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN",
"LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC",
"SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES",
"LK", "SD", "SR", "SJ", "SZ", "SE", "CH", "SY", "TW", "TJ", "TZ",
"TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV",
"UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN",
"VG", "VI", "WF", "EH", "YE", "ZM", "ZW"])
最终,我想要这样:
SalesOrg Code Reporting Country Sold-To Country Code Sold-To Country Name
0001 Spain null (all) null
0002 UK IE Ireland
0002 UK FR France
0002 UK IT Italy
0002 Netherlands AT Austria
0002 Netherlands DK Denmark
0002 Netherlands NL Netherlands
0002 Netherlands BE Belgium
0002 Netherlands LT Lithuania
0002 Netherlands LX Latvia
.......
对于SalesOrg#0002,如果Sold-To Country Code
不是FR IE IT
,其余的将向荷兰报告。所以我想为其余的国家代码创建行。你知道吗
有没有更好的方法来创建行并扩展到现有的数据帧中?你知道吗
看看这能不能满足你的要求。你知道吗
细节
有了它,我们创建了一个新的列
a
,复制了列Sold-To Name
的内容,删除了test'NOT:,将其余的拆分成一个列表通过这个,我们将
a
中每一行的内容与contries列表(c\u列表应该是一个列表,而不是像您所拥有的数据帧)进行比较。你知道吗我们用
Sold-To Code
列的行替换a
列的内容(这是Sold-To Name
中其他国家的列表)在pandas 0.25中,我们有
pandas.DataFrame.explode
,它可以用来将列列表中的每个项复制到单独的行中(其余的列将按原样复制)我们删除列
a
,因为我们不再需要它了。你知道吗这对我来说很好,在你这边检查一下,看看这对你是否也有效。你知道吗
如果你有熊猫0.25,那么Explode就是你需要的:
然后找到需要“展开”到新行的位置:
当然,您必须使用另一个数据框将国家代码与国家名称进行匹配。你知道吗
相关问题 更多 >
编程相关推荐